Avatar billede bhn.314 Nybegynder
03. november 2004 - 14:46 Der er 6 kommentarer og
1 løsning

Nested xsl:for-each

Jeg forsøger at liste personer efter land via nested for-each. Problemet er at jeg gerne vil have fat i den øverste for-each's værdier, dvs:

XML
<country>
  <country_id/>
  <country_name/>
</country>
<person>
  <country_id/>
  <person_name/>
</person>

XSL
<xsl:for-each select="/DOCUMENT/country">
  <p>
  <b><xsl:value-of select="country_name"/></b>
  <xsl:for-each select="/DOCUMENT/person">
    <xsl:if test="country_id=????første for-each's country_id????"> <!-- HER ER PROBLEMET-->
    <xsl:value-of select="person_name"/>
    </xsl:if>
  </xsl:for-each>
  </p>
</xsl:for-each>
Avatar billede atoft Nybegynder
03. november 2004 - 14:59 #1
Så skal du lave en variabel alla
<xsl:variable name="ydre" select="." />

også kan du bruge
<xsl:value-of select="$ydre/country_id" />
Avatar billede atoft Nybegynder
03. november 2004 - 15:00 #2
Din variable skal selvfølgelig laves under den første for-each
Avatar billede ehf Nybegynder
03. november 2004 - 15:00 #3
Det kan du gøre på flere måder.
Enten ved at gemme den yderste country_id i en xsl:variable

Eller ved at gøre mere brug af templates (som jeg syntes er den pæneste)
<xsl:template match="/DOCUMENT/country">
  <p>
  <b><xsl:value-of select="country_name"/></b>
  <xsl:variable name="cid" select="country_id"/>
  <xsl:apply-templates select="/DOCUMENT/person[country_id = $cid]"/>
  </p>
</xsl:template>

<xsl:template match="DOCUMENT/person">
  <xsl:value-of select="person_name"/>
</xsl:template>

Det der med nestede for-each loops i et style sheet kan meget let blive noget snavs.
Avatar billede bhn.314 Nybegynder
03. november 2004 - 15:01 #4
VERDENSKLASSE - du har reddet min dag. TAK
Avatar billede atoft Nybegynder
03. november 2004 - 15:32 #5
>>ehf din løsninger er koster noget mere, da den skal ud og lave en xpath hvergang.
Avatar billede ehf Nybegynder
03. november 2004 - 15:46 #6
Om man henter data fra xml filen ved select eller ved at matche med en template
tager vist ca lige lang tid.

Men ved at benytte templates, kan man bedre udnytte de events som parseren laver ved parsning af xml filen.

Om det ene så er pænere end det andet er vist en smags sag.
Avatar billede atoft Nybegynder
10. november 2004 - 14:56 #7
Sorry ehf. jeg troede han ønskede at bruge værdierne i det indre loop. Jeg ville til en hver tid bruge templates i stedet for for-each. XSLT laver selv for-each om til templates, så hvorfor ikke gøre det selv :-)
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