XSLT: Daten aus XML auslesen

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

  • XSLT: Daten aus XML auslesen

    Ich habe folgendes Problem beim Auslesen von Daten einer XML-Datei mittels XSLT, Ausgabe-Datei ist XHMTL.
    Von der XML-Datei möchte ich die Infoelemente auslesen, diese sollten mittels Link auf eine Bild-Datei verweisen, diese Information über das Bild bzw. die Bildquelle steht an einem anderen Ort im XML-Dokument. Mein Problem ist, dass ich es nicht schaffe, diese Bildinformationen korrekt auszulesen. Entweder er listet mir bei jedem Infoelement sämtliche Bildpfade auf, oder nur den Pfad des letzten Bildes.

    Meine XML-Datei (vereinfacht)

    Quellcode

    1. ...
    2. <fotoalben>
    3. <info_album>
    4. <infotitel>berlin.de</infotitel>
    5. <infoliste>
    6. <infoelement>Sony-Center</infoelement>
    7. <infoelement>Berliner Mauer</infoelement>
    8. <infoelement>Potsdamer Platz</infoelement>
    9. </infoliste>
    10. </info_album>
    11. ...
    12. <album>
    13. <albumtitel>berlin.de</albumtitel>
    14. <bilder>
    15. <bild quelle_original="bilder/berlin1.jpg/>
    16. <bild quelle_original="bilder/berlin2.jpg/>
    17. <bild quelle_original="bilder/berlin3.jpg/>
    18. </bilder>
    19. </album>
    20. ...
    Alles anzeigen

    ...
    XSLT (Ausschnitt, mit dem ich oben beschriebene Aufgabe erledigen möchte)

    Quellcode

    1. <xsl:template match="infoliste">
    2. <ul>
    3. <xsl:for-each select="infoelement">
    4. <li><a class="info">
    5. <xsl:apply-templates select="//bild"/>
    6. <xsl:value-of select="."/></a></li>
    7. </xsl:for-each>
    8. </ul>
    9. </xsl:template>
    10. <xsl:template match="bild">
    11. <xsl:attribute name="href">
    12. <xsl:for-each select=".">
    13. <xsl:value-of select="@quelle_original"/>
    14. </xsl:for-each>
    15. </xsl:attribute>
    16. </xsl:template>
    17. ...
    Alles anzeigen



    Viele Dank für eure Hilfe, wäre toll jemand könnte das Problem lösen.
  • hilft dir vllt sowas:

    Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3. <xsl:template match="/">
    4. <html><body>
    5. <ul>
    6. <xsl:for-each select="/haus/info_album/infoliste/infoelement">
    7. <li>
    8. <b><xsl:value-of select="." /></b>
    9. (<xsl:value-of select="../../infotitel" />)
    10. <xsl:variable name="idx">
    11. <xsl:value-of select="position()" />
    12. </xsl:variable>
    13. <ul>
    14. <xsl:for-each select="/haus/album/bilder/bild[position() = $idx]">
    15. <li><xsl:value-of select="./@quelle_original" /></li>
    16. </xsl:for-each>
    17. </ul>
    18. </li>
    19. </xsl:for-each>
    20. </ul>
    21. </body></html>
    22. </xsl:template>
    23. </xsl:stylesheet>
    Alles anzeigen


    Ergebnis:
    • Sony-Center
      (berlin.de)

      • bilder/berlin1.jpg
    • Berliner Mauer
      (berlin.de)

      • bilder/berlin2.jpg
    • Potsdamer Platz
      (berlin.de)

      • bilder/berlin3.jpg
  • Vielen Dank für deine Hilfe, das hat mich schon mal einen Schritt weiter gebracht.
    Mein geänderter XSLT-Code sieht dann so aus:

    Quellcode

    1. <xsl:template match="info_album">
    2. <h2><xsl:value-of select="infotitel"/></h2>
    3. <xsl:apply-templates select="infoliste"/>
    4. </xsl:template>
    5. <xsl:template match="infoliste">
    6. <ul>
    7. <xsl:for-each select="//fotoalben/info_album/infoliste/infoelement">
    8. <li>
    9. <a class="info">
    10. <xsl:variable name="idx">
    11. <xsl:value-of select="position()" />
    12. </xsl:variable>
    13. <xsl:attribute name="href">
    14. <xsl:for-each select="//album/bilder/bild[position() = $idx]">
    15. <li><xsl:value-of select="./@quelle_original" /></li>
    16. </xsl:for-each>
    17. </xsl:attribute>
    18. <xsl:value-of select="." /></a>
    19. </li>
    20. </xsl:for-each>
    21. </ul>
    22. </xsl:template>
    Alles anzeigen


    Das Problem liegt nun noch darin, dass wenn ich mehrere Fotoalben drin habe, sprich wenn mein XML so aussieht:

    Quellcode

    1. ...
    2. <fotoalben>
    3. <info_album>
    4. <infotitel>berlin.de</infotitel>
    5. <infoliste>
    6. <infoelement>Sony-Center</infoelement>
    7. <infoelement>Berliner Mauer</infoelement>
    8. <infoelement>Potsdamer Platz</infoelement>
    9. </infoliste>
    10. </info_album>
    11. <info_album>
    12. <infotitel>amsterdam.nl</infotitel>
    13. <infoliste>
    14. <infoelement>Park</infoelement>
    15. <infoelement>Einkaufszentrum</infoelement>
    16. <infoelement>Fussballstadion</infoelement>
    17. </infoliste>
    18. </info_album>
    19. ...
    20. <album>
    21. <albumtitel>berlin.de</albumtitel>
    22. <bilder>
    23. <bild quelle_original="bilder/berlin1.jpg/>
    24. <bild quelle_original="bilder/berlin2.jpg/>
    25. <bild quelle_original="bilder/berlin3.jpg/>
    26. </bilder>
    27. </album>
    28. <album>
    29. <albumtitel>amsterdam.nl</albumtitel>
    30. <bilder>
    31. <bild quelle_original="bilder/amsterdam1.jpg/>
    32. <bild quelle_original="bilder/amsterdam2.jpg/>
    33. <bild quelle_original="bilder/amsterdam.jpg/>
    34. </bilder>
    35. </album>
    36. ...
    Alles anzeigen


    Sich das Ergebnis dann für jedes Album so präsentiert (Bildpfad wird von jedem Bild auf dieser Position ausgelesen und <infoelement> des zweiten Albums werden beim ersten Album ebenfalls unten noch aufgelistet):

    Quellcode

    1. <ul>
    2. <li>
    3. <a class="info" href="bilder/berlin1.jpgbilder/amsterdam1.jpg">Sony-Center</a>
    4. </li>
    5. <li>
    6. <a class="info" href="bilder/berlin1.jpgbilder/amsterdam1.jpg">Berliner Mauer</a>
    7. </li>
    8. <li>
    9. <a class="info" href="bilder/berlin1.jpgbilder/amsterdam1.jpg">Potsdamer Platz</a>
    10. </li>
    11. <li>
    12. <a class="info" href="">Park</a>
    13. </li>
    14. <li>
    15. <a class="info" href="">Einkaufszentrum</a>
    16. </li>
    17. <li>
    18. <a class="info" href="">Fussballstadion</a>
    19. </li>
    20. </ul>
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von kli ()

  • Nein, ich verstehe die Frage nicht.
    XML besitzt keine Benutzereingabe, keine Interaktion, kein Applikationskontext.

    XSD beschreibt das Schema um zu prüfen ob eine XML einem bestimmten Format folgt.
    Du willst also ein XSD Schema auf ein XML anwenden?

    Dazu fügst du das Schema entweder in die XML direkt hinzu:

    Quellcode

    1. <Rootknoten xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ue5.xsd">


    oder du benutzt einen Tool wie den vom W3C dazu:
    tools.decisionsoft.com/schemaValidate.html