Avatar billede hulla Novice
14. marts 2006 - 13:59 Der er 5 kommentarer og
1 løsning

løbe igennem xml noder

Hej

Jeg har et xml dokument med nogenlunde dette udseenede:

<PAGE>
  <RESULTSET TOTALHITS="1226">
  <HIT NO="1">
    <F NAME="rank">0</F>
    <F NAME="id">332</F>
    <F NAME="content">bil</F>
    <F NAME="color">gul</F>
  </HIT>
  <HIT NO="2">
    <F NAME="rank">0</F>
    <F NAME="id">334</F>
    <F NAME="content">bil</F>
    <F NAME="color">hvid</F>
  </HIT>
  </RESULTSET>
</PAGE>

Det vil jeg godt have listet ud på en side via xslt.

Jeg løber igennem på denne måde:
<xsl:for-each select="PAGE/RESULTSET/HIT">
  <tr>
  ....
    Her ville jeg godt kunne tage fat i "id", "color" osv.
    men er som jeg kan se det, er jeg tvunget til at gøre noget 
    i retning af:
    <xsl:for-each select="./F">   
      <xsl:choose>                              <xsl:when test="@NAME='id'">                        <td>                              <xsl:value-of select="." />                    </td>               
          </xsl:when>               
          <xsl:when test="@NAME='color'">                    <td>                                  <xsl:value-of select="." />                    </td>                              </xsl:when>                            </xsl:choose>
    </xsl:for-each>
  ........
  </tr>


Jeg ville dog langt hellere kunne gøre noget i retning af:
./F.id
./F.color
altså tage fat i elementets navne værdier et niveau højere oppe..

det her virker naturligvis ikke, men kan det ombygges så jeg får ideen i det frem?
Nogen der forstår mit problem?

:-)
Avatar billede Slettet bruger
14. marts 2006 - 14:33 #1
Du skal bare have lært at bruge templates effektivt :-)

Hiv den stump HTML der skal repræsentere eet HIT ind i sin egen template - f.eks.:

<xsl:template match="HIT">
<tr>
  <td><xsl:value-of select="F[@NAME = 'id']" /></td>
  <td><xsl:value-of select="F[@NAME = 'color']" /></td>
  ...
</tr>
</xsl:template>

Og start så med f.eks. <xsl:apply-templates select="/PAGE/RESULTSET/HIT" />

/CS
Avatar billede hulla Novice
14. marts 2006 - 16:03 #2
Det ser ud til at virke glimrende, men har et lidt underligt problem.

Når jeg får siden vist med resultatet glider tabellen langt ned på siden.
Kigger jeg i kildekoden kan jeg ikke se noget der burde give det resultat.

Som om denne løkke rykker det hele ned:

<xsl:for-each select="/PAGE/RESULTSET">           
    <xsl:apply-templates select="HIT" />       
</xsl:for-each>

har du nogen ideer?
Avatar billede Slettet bruger
14. marts 2006 - 21:36 #3
Nej - det er ikke til at vide - jeg forstår ikke helt... kan du ikke se i den *genererede* HTML, hvad der går galt?

/CS

PS: Hvis det eneste den for-each gør, er at apply'e HIT, så overvej at skifte den ud med en template i stedet:

<xsl:template match="RESULTSET">           
    <xsl:apply-templates select="HIT" />       
</xsl:template>
Avatar billede hulla Novice
15. marts 2006 - 09:26 #4
Det er en meget underlig situation som jeg ikke har set før.
Hvis jeg tager kildekoden og gemmer som en htm fil giver det samme resultat.
Tager jeg så og skærer helt ned så der kun er html, body og table tilbage så gør den det samme.

Det sjove er, at gemmer jeg nu filen med ANSI encoding og ellers som htm fil så vises der en lang række ? tegn oven over min tabel og det er jo derfor min table bliver placeret så langt nede.
Der kommer flere rækker ? tegn alt efter hvor mange rækker jeg smider i min tabel.

Nogen der ved noget om det?
Avatar billede hulla Novice
27. marts 2006 - 15:10 #5
Ingen der ved noget om det?
Avatar billede Slettet bruger
28. marts 2006 - 11:34 #6
Kan du lægge filerne et sted hvor jeg kan se/hente dem - det virker som om der er "garbage" i din XML fil (autogenereret, ikke?).

/CS
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester