Avatar billede elohite Nybegynder
06. september 2002 - 10:33 Der er 1 løsning

Fange flere elementer med samme navn

Jeg har et XML dokument der ser såden ud:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="people.xsl" ?>

<people>

<person id="1">
  <name>
  <first_name>Kim</first_name>
  <last_name>Melkane</last_name>
  </name>
  <telephones>
  <telephone>62 22 87 88</telephone>
  <mobile></mobile>
  </telephones>
  <emails>
  <email>melkane@ofir.dk</email>
  <email>melkane@get2net.dk</email>
  </emails>
  <jobs>
  <job>Projekt Leder</job>
  <job>OOA og OOD Specilist</job>
  <job>Gramatik og Ordstilling Specilist</job>
  <job>Fremmedord Specilist</job>
  </jobs>
</person>

<person id="2">
  <name>
  <first_name>Anders</first_name>
  <last_name>Riis</last_name>
  </name>
  <telephones>
  <telephone></telephone>
  <mobile>24 61 50 03</mobile>
  </telephones>
  <emails>
  <email>anders_riis@coolsurf.dk</email>
  <email>anders_riis@hotmail.com</email>
  </emails>
  <jobs>
  <job>Version Styring og Backup</job>
  </jobs>
</person>

<person id="3">
  <name>
  <first_name>Lars</first_name>
  <last_name>Lauritsen</last_name>
  </name>
  <telephones>
  <telephone>62 21 59 90</telephone>
  <mobile></mobile>
  </telephones>
  <emails>
  <email>substanZe@fallen.dk</email>
  </emails>
  <jobs>
  <job>Servlett Specilist</job>
  <job>XML og XSLT Specilist</job>
  <job>OOA og OOD Specilist</job>
  <job>Gramatik og Ordstilling Specilist</job>
  </jobs>
</person>


<person id="4">
  <name>
  <first_name>Soeren</first_name>
  <last_name>Due</last_name>
  </name>
  <telephones>
  <telephone>62 20 88 01</telephone>
  <mobile>22 13 92 74</mobile>
  </telephones>
  <emails>
  <email>due.fhis@post.tele.dk</email>
  </emails>
  <jobs>
  <job>Gramatik og Ordstilling Specilist</job>
  <job>Adv. Algoritmer Specilist</job>
  </jobs>
</person>

<person id="5">
  <name>
  <first_name>Gorm</first_name>
  <last_name>Reventlow</last_name>
  </name>
  <telephones>
  <telephone></telephone>
  <mobile>40 96 93 67</mobile>
  </telephones>
  <emails>
  <email>locutus@fallen.dk</email>
  <email>gr@fallen.dk</email>
  <email>gorm@reventlow.com</email>
  </emails>
  <jobs>
  <job>Adv. og Tidskraevende Web-Surfing</job>
  <job>Adv. og Tidskraevende Web-Chatting</job>
  </jobs>
</person>

</people>

Som i kan se så er der genganger af elementerne "email" og "job". Dem prøver jeg at få vist i et XSLT dokumment.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
<xsl:template match="people">
  <html>
  <head>
  </head>
  <body>
    <div align="center"><h1>xsl:for-each</h1></div>
    <xsl:apply-templates select="person"/><br/>
  </body>
  </html>
</xsl:template>
 
<xsl:template match="person">
  <xsl:if test="@id mod 2 = 0">
    <p>
    <strong><font size="+2" color="blue"><xsl:value-of select="name"/></font></strong><br/>
    <xsl:for-each select="telephones">
    <xsl:if test="string-length(telephone) != 0">
      <font color="blue">Tlf nr: <xsl:value-of select="telephone"/></font><br/>
    </xsl:if>
    <xsl:if test="string-length(mobile) != 0">
      <font color="blue">Mobile nr: <xsl:value-of select="mobile"/></font><br/>
    </xsl:if>
    </xsl:for-each>
    <xsl:for-each select="emails">
    <xsl:if test="string-length(email) != 0">
      <font color="blue">Email: <xsl:value-of select="email"/></font><br/>
    </xsl:if>
    </xsl:for-each>
    <xsl:for-each select="jobs">
    <xsl:if test="string-length(job) != 0">
      <font color="blue">Job: <xsl:value-of select="job"/></font><br/>
    </xsl:if>
    </xsl:for-each>
    </p>
  </xsl:if>
  <xsl:if test="@id mod 2 = 1">
  <p>
    <strong><font size="+2" color="red"><xsl:value-of select="name"/></font></strong><br/>
    <xsl:for-each select="telephones">
    <xsl:if test="string-length(telephone) != 0">
      <font color="red">Tlf nr: <xsl:value-of select="telephone"/></font><br/>
    </xsl:if>
    <xsl:if test="string-length(mobile) != 0">
      <font color="red">Mobile nr: <xsl:value-of select="mobile"/></font><br/>
    </xsl:if>
    </xsl:for-each>
    <xsl:for-each select="emails">
    <xsl:if test="string-length(email) != 0">
      <font color="red">Email: <xsl:value-of select="email"/></font><br/>
    </xsl:if>
    </xsl:for-each>
    <xsl:for-each select="jobs">
    <xsl:if test="string-length(job) != 0">
      <font color="red">Job: <xsl:value-of select="job"/></font><br/>
    </xsl:if>
    </xsl:for-each>  </p>
  </xsl:if>
</xsl:template>

</xsl:stylesheet>


Jeg får dog kun vist det først element i "job" og "email".... hvorfor viser de kun det førest element og hvordan løser jeg problemet?
Avatar billede janegil Nybegynder
06. september 2002 - 10:45 #1
Fordi du spør om each "jobs" og "emails" som er lister av "job" og "email" elementer? Du skal nok inn i each "jobs", og spørre etter each "job" også.
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