Reputation: 3
I want to generate a table in my HTML for all 7 options in my XML.
I guess it works with <xsl:for-each>
but I don't get it right, it only displays the same things.
Here is my XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="adressbuch.xsl"?>
<ADRESSBUCH>
<PERSON KATEGORIE="Privat">
<ANREDE TITEL="Herr"/>
<VOLLER_NAME>
<NAME>Müller</NAME>
<VORNAME>Hans</VORNAME>
<MITTELNAME>Peter</MITTELNAME>
<SPITZNAME>meier</SPITZNAME>
</VOLLER_NAME>
<GEBURTSTAG DATUM="12.04.1965"/>
<BERUF BEZEICHNUNG="Lehrer"/>
<ADRESSE>
<ADRESSE_PRIVAT>
<STRASSE>Hinterberg 4</STRASSE>
<POSTFACH>357</POSTFACH>
<POSTLEITZAHL>56070</POSTLEITZAHL>
<ORT>Koblenz</ORT>
<REGION>Rheinland</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_PRIVAT>
<ADRESSE_GESCHAEFT>
<FIRMA>Muster AG</FIRMA>
<STRASSE>Vordemberg 8</STRASSE>
<POSTFACH>456</POSTFACH>
<POSTLEITZAHL>56098</POSTLEITZAHL>
<ORT>Koblenz</ORT>
<REGION>Rheinland</REGION>
<LAND>Deutschland</LAND>
<HOMEPAGE>http://www.musterag.de</HOMEPAGE>
</ADRESSE_GESCHAEFT>
</ADRESSE>
<KONTAKT>
<TELEFON>
<TELEFON_PRIVAT>0521234567</TELEFON_PRIVAT>
<TELEFON_GESCHAEFT>0529876543</TELEFON_GESCHAEFT>
</TELEFON>
<MOBILE>01781234567</MOBILE>
<FAX>0526549873</FAX>
<EMAIL>
<EMAIL_PRIVAT>[email protected]</EMAIL_PRIVAT>
<EMAIL_GESCHAEFT>[email protected]</EMAIL_GESCHAEFT>
</EMAIL>
<HOMEPAGE>http://www.meierspage.de</HOMEPAGE>
</KONTAKT>
</PERSON>
<PERSON KATEGORIE="Privat">
<ANREDE TITEL="Herr"/>
<VOLLER_NAME>
<NAME>Elmer</NAME>
<VORNAME>Rolf</VORNAME>
<SPITZNAME>rolfi</SPITZNAME>
</VOLLER_NAME>
<GEBURTSTAG DATUM="28.3.1960"/>
<BERUF BEZEICHNUNG="Abteilungsleiter"/>
<ADRESSE>
<ADRESSE_PRIVAT>
<STRASSE>Dorfstrasse 23</STRASSE>
<POSTLEITZAHL>56070</POSTLEITZAHL>
<ORT>Koblenz</ORT>
<REGION>Rheinland</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_PRIVAT>
<ADRESSE_GESCHAEFT>
<FIRMA>Visita AG</FIRMA>
<STRASSE>Alleestrasse 9</STRASSE>
<POSTFACH>325</POSTFACH>
<POSTLEITZAHL>56098</POSTLEITZAHL>
<ORT>Koblenz</ORT>
<REGION>Rheinland</REGION>
<LAND>Deutschland</LAND>
<HOMEPAGE>http://www.visita.de</HOMEPAGE>
</ADRESSE_GESCHAEFT>
</ADRESSE>
<KONTAKT>
<TELEFON>
<TELEFON_PRIVAT>0523632854</TELEFON_PRIVAT>
<TELEFON_GESCHAEFT>0526521771</TELEFON_GESCHAEFT>
</TELEFON>
<MOBILE>01793698547</MOBILE>
<FAX>052652172</FAX>
<EMAIL>
<EMAIL_PRIVAT>[email protected]</EMAIL_PRIVAT>
<EMAIL_GESCHAEFT>[email protected]</EMAIL_GESCHAEFT>
</EMAIL>
</KONTAKT>
</PERSON>
<PERSON KATEGORIE="Privat">
<ANREDE TITEL="Herr"/>
<VOLLER_NAME>
<NAME>Marks</NAME>
<VORNAME>Alois</VORNAME>
<SPITZNAME>wisi</SPITZNAME>
</VOLLER_NAME>
<GEBURTSTAG DATUM="22.12.1958"/>
<BERUF BEZEICHNUNG="Versicherungs Agent"/>
<ADRESSE>
<ADRESSE_PRIVAT>
<STRASSE>Untere Legi 5</STRASSE>
<POSTLEITZAHL>65191</POSTLEITZAHL>
<ORT>Wiesbaden</ORT>
<REGION>Rheinhessen</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_PRIVAT>
<ADRESSE_GESCHAEFT>
<FIRMA>Helsana Versicherungen AG</FIRMA>
<STRASSE>Bahnhofstrasse 15</STRASSE>
<POSTFACH>365</POSTFACH>
<POSTLEITZAHL>65191</POSTLEITZAHL>
<ORT>Wiesbaden</ORT>
<REGION>Rheinhessen</REGION>
<LAND>Deutschland</LAND>
<HOMEPAGE>http://www.helsana.de</HOMEPAGE>
</ADRESSE_GESCHAEFT>
</ADRESSE>
<KONTAKT>
<TELEFON>
<TELEFON_PRIVAT>0712689665</TELEFON_PRIVAT>
<TELEFON_GESCHAEFT>0713265489</TELEFON_GESCHAEFT>
</TELEFON>
<MOBILE>01796942365</MOBILE>
<FAX>01713265480</FAX>
<EMAIL>
<EMAIL_PRIVAT>[email protected]</EMAIL_PRIVAT>
<EMAIL_GESCHAEFT>[email protected]</EMAIL_GESCHAEFT>
</EMAIL>
<HOMEPAGE>http://www.wisimark.de</HOMEPAGE>
</KONTAKT>
</PERSON>
<PERSON KATEGORIE="Geschäft">
<ANREDE TITEL="Frau"/>
<VOLLER_NAME>
<NAME>Brunner</NAME>
<VORNAME>Beatrix</VORNAME>
<MITTELNAME>Katharina</MITTELNAME>
<SPITZNAME>rina</SPITZNAME>
</VOLLER_NAME>
<GEBURTSTAG DATUM="15.1.1951"/>
<BERUF BEZEICHNUNG="Kaufmännische Angestellte"/>
<ADRESSE>
<ADRESSE_PRIVAT>
<STRASSE>Dreieck</STRASSE>
<POSTLEITZAHL>65187</POSTLEITZAHL>
<ORT>Idstein</ORT>
<REGION>Rheinhessen</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_PRIVAT>
<ADRESSE_GESCHAEFT>
<FIRMA>Spitex Verein</FIRMA>
<STRASSE>Heimatstrasse 26</STRASSE>
<POSTFACH>230</POSTFACH>
<POSTLEITZAHL>79085</POSTLEITZAHL>
<ORT>Freiburg</ORT>
<REGION>Breisgau</REGION>
<LAND>Deutschland</LAND>
<HOMEPAGE>http://www.spitex-teufen.de</HOMEPAGE>
</ADRESSE_GESCHAEFT>
</ADRESSE>
<KONTAKT>
<TELEFON>
<TELEFON_PRIVAT>0712253269</TELEFON_PRIVAT>
<TELEFON_GESCHAEFT>01712253322</TELEFON_GESCHAEFT>
</TELEFON>
<EMAIL>
<EMAIL_GESCHAEFT>[email protected]</EMAIL_GESCHAEFT>
</EMAIL>
</KONTAKT>
</PERSON>
<PERSON KATEGORIE="Privat">
<ANREDE TITEL="Frau"/>
<VOLLER_NAME>
<NAME>Kamm</NAME>
<VORNAME>Susanne</VORNAME>
<SPITZNAME>susi</SPITZNAME>
</VOLLER_NAME>
<GEBURTSTAG DATUM="30.9.1970"/>
<BERUF BEZEICHNUNG="Physiotherapeutin"/>
<ADRESSE>
<ADRESSE_PRIVAT>
<STRASSE>Gartenweg</STRASSE>
<POSTLEITZAHL>33790</POSTLEITZAHL>
<ORT>Halle</ORT>
<REGION>Westfalen</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_PRIVAT>
<ADRESSE_GESCHAEFT>
<FIRMA>Physiotherapie Susanne Kamm</FIRMA>
<STRASSE>Gartenweg</STRASSE>
<POSTLEITZAHL>33790</POSTLEITZAHL>
<ORT>Halle</ORT>
<REGION>Westfalen</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_GESCHAEFT>
</ADRESSE>
<KONTAKT>
<TELEFON>
<TELEFON_PRIVAT>0816495512</TELEFON_PRIVAT>
<TELEFON_GESCHAEFT>0816495512</TELEFON_GESCHAEFT>
</TELEFON>
<MOBILE>01794508081</MOBILE>
<FAX>0816495512</FAX>
<EMAIL>
<EMAIL_PRIVAT>[email protected]</EMAIL_PRIVAT>
<EMAIL_GESCHAEFT>[email protected]</EMAIL_GESCHAEFT>
</EMAIL>
<HOMEPAGE>http://www.physiotherapie-kamm.de</HOMEPAGE>
</KONTAKT>
</PERSON>
<PERSON KATEGORIE="Privat" PERSON_ID="6">
<ANREDE TITEL="Herr"/>
<VOLLER_NAME>
<NAME>Jenny</NAME>
<VORNAME>Heinrich</VORNAME>
<MITTELNAME>Josef</MITTELNAME>
<SPITZNAME>heiri</SPITZNAME>
</VOLLER_NAME>
<GEBURTSTAG DATUM="19.3.1933"/>
<BERUF BEZEICHNUNG="Rentner"/>
<ADRESSE>
<ADRESSE_PRIVAT>
<STRASSE>Tobel</STRASSE>
<POSTLEITZAHL>33456</POSTLEITZAHL>
<ORT>Bielefeld</ORT>
<REGION>Westfalen</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_PRIVAT>
</ADRESSE>
<KONTAKT>
<TELEFON>
<TELEFON_PRIVAT>0556436825</TELEFON_PRIVAT>
</TELEFON>
<EMAIL/>
</KONTAKT>
</PERSON>
<PERSON KATEGORIE="Geschäft" PERSON_ID="7">
<ANREDE TITEL="Herr"/>
<VOLLER_NAME>
<NAME>Pinkwasser</NAME>
<VORNAME>Eduard</VORNAME>
<SPITZNAME>edi</SPITZNAME>
</VOLLER_NAME>
<GEBURTSTAG DATUM="2.7.1940"/>
<BERUF BEZEICHNUNG="Künstler"/>
<ADRESSE>
<ADRESSE_PRIVAT>
<STRASSE>Sonnenallee 24</STRASSE>
<POSTLEITZAHL>66623</POSTLEITZAHL>
<ORT>Mainz</ORT>
<REGION>Rheinhessen</REGION>
<LAND>Deutschland</LAND>
</ADRESSE_PRIVAT>
<ADRESSE_GESCHAEFT>
<FIRMA>Kunsthaus</FIRMA>
<STRASSE>Sonnenallee 1</STRASSE>
<POSTFACH>121</POSTFACH>
<POSTLEITZAHL>67657</POSTLEITZAHL>
<ORT>Rockenhausen</ORT>
<REGION>Pfalz</REGION>
<LAND>Deutschland</LAND>
<HOMEPAGE>http://www.kunst-sevelen.de</HOMEPAGE>
</ADRESSE_GESCHAEFT>
</ADRESSE>
<KONTAKT>
<TELEFON>
<TELEFON_PRIVAT>0813657895</TELEFON_PRIVAT>
<TELEFON_GESCHAEFT>0813659874</TELEFON_GESCHAEFT>
</TELEFON>
<MOBILE>0178889689</MOBILE>
<FAX>0813659870</FAX>
<EMAIL>
<EMAIL_PRIVAT>[email protected]</EMAIL_PRIVAT>
<EMAIL_GESCHAEFT>[email protected]</EMAIL_GESCHAEFT>
</EMAIL>
</KONTAKT>
</PERSON>
</ADRESSBUCH>
And here my xsl-file:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">
<html>
<head>
<title>Adressbuch</title>
</head>
<body>
<table border="1">
<tr>
<th>Nr.</th>
<th>Anrede</th>
<th>Vorname</th>
<th>Name</th>
<th>Beruf</th>
<th>Tel. Privat</th>
</tr>
<xsl:apply-templates select="/ADRESSBUCH/PERSON" />
</table>
</body>
</html>
</xsl:template>
<xsl:template match="*">
<tr>
<td>
<xsl:number format="01" value="position()" />
</td>
<td>
<xsl:value-of select="/ADRESSBUCH/PERSON/ANREDE/@TITEL" />
</td>
<td>
<xsl:value-of select="/ADRESSBUCH/PERSON/VOLLER_NAME/VORNAME" />
</td>
<td>
<xsl:value-of select="/ADRESSBUCH/PERSON/VOLLER_NAME/NAME" />
</td>
<td>
<xsl:value-of select="/ADRESSBUCH/PERSON/BERUF/@BEZEICHNUNG" />
</td>
<td>
<xsl:value-of select="/ADRESSBUCH/PERSON/KONTAKT/TELEFON/TELEFON_PRIVAT" />
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
this is my current output:
http://img5.fotos-hochladen.net/uploads/unbenanntw1afuteozp.png
so it should get the next
the second will be looking like this:
02|Herr|Rolf|Elmer|Abteilungsleiter|0523632854
Upvotes: 0
Views: 65
Reputation: 116959
When you do:
<xsl:value-of select="/ADRESSBUCH/PERSON/ANREDE/@TITEL" />
you are starting at the root of the XML input and getting the value of the first one of the selected nodes.
Since at this point you are already in the context of a PERSON
1, you should be using the relative path from there:
<xsl:value-of select="ANREDE/@TITEL" />
and so on.
--
[1] For good measure, I would change:
<xsl:template match="*">
to:
<xsl:template match="PERSON">
It will make no difference for as long as you are only using the two templates, but it will make a big difference if you ever find you need to add another one.
Upvotes: 2