XSLT: Daten aus XML auslesen

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • 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)

    Source Code

    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. ...
    Display All

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

    Source Code

    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. ...
    Display All



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

    Source Code

    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>
    Display All


    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:

    Source Code

    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>
    Display All


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

    Source Code

    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. ...
    Display All


    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):

    Source Code

    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>
    Display All

    The post was edited 1 time, last by kli ().

  • nein?
    weil ich hab doch eine xml-datei und eine xsd-datei
    die vom nutzer eingegebenen daten sollen ausgelesen werden, welche er zurück schickt.
    nun weiß ich nicht wie diese daten ausgelesen werden und wo ich diesen befehl reinschreiben soll, für mich logischerweise in die xsd-datei,oder?
  • 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:

    Source Code

    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