Hallo
Da ich schon einige Fragen hier gestellt habe, hoffe ich das noch eine ok geht.
Vielleich hat jemand von euch eine Idee oder Hinweis.
Ist Zustand: Habe ein XML Document, wo das Wurzelelement einen Container darstellt. Alle unmittelbaren Kinder bilden die Wurzel von weitern Bäumen (zb liste,artikel,usw). Die Elemente enthalten Attribute welche quasi einen Link auf die passende ID des nächsten Teilbaumes darstellt.
Im Beispiel ist liste welche drei artikel enthält, welche wiederum type enthalten.
Ziel der Lösung: Einen Ergebnisbaum in welchen die verlinkten Teilbäume (link) korrekt eingefügt werden und eventuelle Kinderelemente (zb desc) berücksichtigt wird.
Die bisherige Lösung funktioniert - aber schlecht gelöst. Ich suche eine Lösung ohne xsl:template name="link" (bzw xsl:call-template name="link"),
schön wäre ein xsl:apply-templates wo der select Attribut diese Aufgabe komplett übernehmen kann.
Vielen Dank im Voraus
Meine bisherige funktionierende Lösung
Da ich schon einige Fragen hier gestellt habe, hoffe ich das noch eine ok geht.
Vielleich hat jemand von euch eine Idee oder Hinweis.
Ist Zustand: Habe ein XML Document, wo das Wurzelelement einen Container darstellt. Alle unmittelbaren Kinder bilden die Wurzel von weitern Bäumen (zb liste,artikel,usw). Die Elemente enthalten Attribute welche quasi einen Link auf die passende ID des nächsten Teilbaumes darstellt.
Im Beispiel ist liste welche drei artikel enthält, welche wiederum type enthalten.
Ziel der Lösung: Einen Ergebnisbaum in welchen die verlinkten Teilbäume (link) korrekt eingefügt werden und eventuelle Kinderelemente (zb desc) berücksichtigt wird.
Die bisherige Lösung funktioniert - aber schlecht gelöst. Ich suche eine Lösung ohne xsl:template name="link" (bzw xsl:call-template name="link"),
schön wäre ein xsl:apply-templates wo der select Attribut diese Aufgabe komplett übernehmen kann.
Vielen Dank im Voraus
Code:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="artikel_liste.xsl" ?> <container> <liste id="1" linka="2" linkb="3"> <name>Liste</name> <desc>Liste ueber allesmoegliche</desc> </liste> <artikel id="2" link="4"> <name>Artikel A</name> </artikel> <artikel id="3" linka="5" linkb="6"> <name>Artikel B</name> </artikel> <type id="4">Type A</type> <type id="5">Type B</type> <type id="6">Type C</type> </container>
Meine bisherige funktionierende Lösung
Code:
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> </head> <body> <xsl:apply-templates select="//*[@id='1']"/> </body> </html> </xsl:template> <xsl:template match="liste"> name: <xsl:value-of select="."/><hr/> <xsl:call-template name="link"/> <hr/> </xsl:template> <xsl:template match="artikel"> name: <xsl:value-of select="."/><hr/> <xsl:call-template name="link"/><hr/> </xsl:template> <xsl:template match="type"> name: <xsl:value-of select="."/><br/> <xsl:call-template name="link"/><hr/> </xsl:template> <xsl:template match="desc"> name: <xsl:value-of select="."/><br/> <xsl:call-template name="link"/><hr/> </xsl:template> <!-- Baut alle Zusammen --> <xsl:template name="link"> <xsl:for-each select="@*"> <xsl:if test="name()!='id'"> <xsl:variable name="link" select="."/> <xsl:apply-templates select="//*[@id=$link]"/> </xsl:if> </xsl:for-each> <xsl:apply-templates/> </xsl:template> <xsl:template match="*"> </xsl:template> </xsl:stylesheet>
Comment