Adressbuch mit XSLT formatieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Adressbuch mit XSLT formatieren

    Quelldatei:

    Quellcode

    1. <ADRESSBUCH>
    2. <PERSON KATEGORIE="Privat">
    3. <ANREDE TITEL="Herr"/>
    4. <VOLLER_NAME>
    5. <NAME>Müller</NAME>
    6. <VORNAME>Hans</VORNAME>
    7. </VOLLER_NAME>
    8. <GEBURTSTAG DATUM="12.04.1965"/>
    9. <BERUF BEZEICHNUNG="Lehrer"/>
    10. <ADRESSE>
    11. <ADRESSE_PRIVAT>
    12. <STRASSE>Hinterberg 4</STRASSE>
    13. <POSTFACH>357</POSTFACH>
    14. <POSTLEITZAHL>56070</POSTLEITZAHL>
    15. <ORT>Koblenz</ORT>
    16. <REGION>Rheinland</REGION>
    17. <LAND>Deutschland</LAND>
    18. </ADRESSE_PRIVAT>
    19. </ADRESSE>
    20. <KONTAKT>
    21. <TELEFON>
    22. <TELEFON_PRIVAT>0521234567</TELEFON_PRIVAT>
    23. <MOBILE>01781234567</MOBILE>
    24. </TELEFON>
    25. </KONTAKT>
    26. </PERSON>
    27. </ADRESSBUCH>
    Alles anzeigen


    Schreiben Sie ein XSLT-Dokument, mit dem Sie eine Transformation von einem XML-Dokument (adressbuch.xml) in ein [coderwiki]Informationen/XHTML[/coderwiki]-Dokument durchführen können. Im XHTML-Dokument soll eine Tabelle erstellt werden. Das erstellte XSLT-Stylesheet sollen Sie nun durch
    geeignete [coderwiki]Informationen/XPath[/coderwiki]-Ausdrücke überarbeiten werden. Als Zusatz erweitern Sie die Tabelle mit einer Nummerierung (Laufnummer). Das zu erstellende HTML-Dokument soll wie die folgt aussehen.

    Lösung

    Quellcode

    1. <?xml version="1.0" encoding="iso-8859-1"?>
    2. <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3. <xsl:output method="xhtml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    4. <xsl:template match="/">
    5. <html>
    6. <head>
    7. <title>XSLT Adressbuch Test</title>
    8. </head>
    9. <body>
    10. <table>
    11. <tr>
    12. <th>Nr.</th>
    13. <th>Anrede</th>
    14. <th>Vorname</th>
    15. <th>Name</th>
    16. <th>Beruf</th>
    17. <th>Tel.Privat</th>
    18. </tr>
    19. <xsl:apply-templates/>
    20. </table>
    21. </body>
    22. </html>
    23. </xsl:template>
    24. <xsl:template match="ADRESSBUCH">
    25. <xsl:for-each select="PERSON">
    26. <xsl:sort select="VOLLER_NAME/NAME" data-type="text" />
    27. <tr>
    28. <td><xsl:number value="position()" format="01." /></td> <!--Nr.//-->
    29. <td><xsl:value-of select="ANREDE/@TITEL"/></td> <!--Anrede//-->
    30. <td><xsl:value-of select="VOLLER_NAME/VORNAME"/></td> <!--Vorname//-->
    31. <td><xsl:value-of select="VOLLER_NAME/NAME"/></td> <!--Name//-->
    32. <td><xsl:value-of select="BERUF/@BEZEICHNUNG"/></td> <!--Beruf//-->
    33. <td><xsl:value-of select="KONTAKT/TELEFON/TELEFON_PRIVAT"/></td> <!--Tel.Privat//-->
    34. </tr>
    35. </xsl:for-each>
    36. </xsl:template>
    37. </xsl:stylesheet>
    Alles anzeigen
    Bilder
    • aufgabe1.gif

      40,39 kB, 703×308, 1.348 mal angesehen
  • Aufgabe2:
    Ergebnisbaum als [coderwiki]Informationen/XML[/coderwiki]-Dokument ausgeben.
    Sie sollen aus dem XML-Dokument adressbuch.xml ein anderes XML-Dokument erstellen. In diesem zweiten XML-Dokument sollen die folgenden Elemente vorhanden sein:
    • ADRESSBUCH als Wurzelelement mit PERSON-Elementen
    • für das im Quellendokument vorhandene PERSON-Element übernehmen
      Sie das KATEGORIE Attribut.
    • das VORNAME-Element soll übernommen werden
    • das NAME-Element soll übernommen werden
    • die Anrede soll zu einem Attribut des NAME-Elements werden.
    • das BERUF-Element soll übernommen werden
    • Strasse, Postleitzahl und Ort sollen zu einem Element ADRESSE
      zusammengefasst werden.
    • GEBURTSTAG-Element und dem dazugehörigen Wert getrennt
      in JAHR, MONAT, TAG-Element)


    Lösung:

    Quellcode

    1. <?xml version="1.0" encoding="iso-8859-1"?>
    2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3. <xsl:output method="xml"/>
    4. <xsl:template match="/">
    5. <ADRESSBUCH>
    6. <xsl:apply-templates/>
    7. </ADRESSBUCH>
    8. </xsl:template>
    9. <xsl:template match="ADRESSBUCH">
    10. <xsl:for-each select="PERSON">
    11. <xsl:sort select="@KATEGORIE" data-type="text" />
    12. <xsl:variable name="datum_jahr" select="substring-after(GEBURTSTAG/@DATUM, '.')"/>
    13. <xsl:variable name="kategorie" select="@KATEGORIE"/>
    14. <xsl:variable name="anrede" select="ANREDE/@TITEL"/>
    15. <xsl:variable name="beruf" select="BERUF/@BEZEICHNUNG"/>
    16. <PERSON KATEGORIE="{$kategorie}">
    17. <NAME ANREDE="{$anrede}"><xsl:value-of select="VOLLER_NAME/NAME"/></NAME>
    18. <xsl:copy-of select="VOLLER_NAME/VORNAME"/>
    19. <BERUF BEZEICHNUNG="{$beruf}"/>
    20. <GEBURTSTAG>
    21. <TAG><xsl:value-of select="substring-before(GEBURTSTAG/@DATUM, '.')" /></TAG>
    22. <MONAT><xsl:value-of select="substring-before($datum_jahr, '.')" /></MONAT>
    23. <JAHR><xsl:value-of select="substring-after($datum_jahr, '.')" /></JAHR>
    24. </GEBURTSTAG>
    25. <ADRESSE>
    26. <STRASSE><xsl:value-of select="ADRESSE/ADRESSE_PRIVAT/STRASSE"/></STRASSE>
    27. <POSTLEITZAHL><xsl:value-of select="ADRESSE/ADRESSE_PRIVAT/POSTLEITZAHL"/></POSTLEITZAHL>
    28. <ORT><xsl:value-of select="ADRESSE/ADRESSE_PRIVAT/ORT"/></ORT>
    29. </ADRESSE>
    30. </PERSON>
    31. </xsl:for-each>
    32. </xsl:template>
    33. </xsl:stylesheet>
    Alles anzeigen