Tricky XSLT
Manfred
- xsl
Hi!
Ich habe ein XML, mit einer Menge a-Elemente,
welche über eine ID auf b-elemente verweisen,
welche weitere Daten zum a-Element haben.
Bsp.:
<test>
<a id="1">
<ref id="2">
</a>
<b refid="2" name="hallo welt!" />
</test>
Ich möchte nun alle Attribute jedes a-Elementes ausgeben -
auch diese, die in ein dazugehöriges b-Element ausgelagert wurden.
Das folgende funzt leider nicht, weil ./@id sich in diesem
Fall ja bereits auf die ID des gefundenen b-Elements beziehen würde.
<xsl:for-each select="a">
<xsl:value-of select="//b[@refid = ./@id]/name" />
</xsl:for-each>
Somit würden hier alle b-Elemente gefunden werden, bei denen die refid gleich wie die id ist.
Ich brauche also irgendwie ein Schlüsselwort, welches mir
den aktuellen Knoten aus der for-each-Schleife gibt.
Danke und lG
Manfred
Hi,
Ich habe ein XML, mit einer Menge a-Elemente,
welche über eine ID auf b-elemente verweisen,
Haben diese in der DTD den Typ ID?
Und die Verweise haben in der DTD den Typ IDREF bzw. IDREFS?
<a id="1">
Dann wäre es sinnvoll, auch korrekte IDs zu benutzen. Nummern sind keine korrekten IDs.
cu,
Andreas
Hi Andreas!
Ich bin jetzt etwas weitergekommen. Ich kann die XSLT-Funktion "id" verwenden, um auf ein Element mit einer Bestimmten ID zuzugreifen (http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#id)
Alternativ dazu kann ich die XSLT-Funktion "key()" verwenden, um auf ein beliebiges Element zuzugreifen, welches einen bestimmten Wert hat.
Das löst mein Problem, drängt mir aber eine weitere Frage auf:
key() funktioniert laut SELFHTML nur, wenn man alle Elemente haben möchte, die einen bestimmten Wert haben, z. B. alle a-Elemente, für die gilt: id="ABCDIEKATZELIGHTIMSCHNEE". Was aber, wenn man die gesuchten Elemente aufgrund von mehreren Eigenschaften einschränken möchte, z. B. alle a-Elemente für die gilt: id1="ABCDIEKATZELIGHTIMSCHNEE" sowie id2="RIRARUUNDDRAUSBISDU" ?
Gibt's hierzu eine Lösung oder muss man das irgendwie händisch machen ?
lG Manfred
Hallo,
Ich bin jetzt etwas weitergekommen. Ich kann die XSLT-Funktion "id" verwenden, um auf ein Element mit einer Bestimmten ID zuzugreifen (http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#id)
Alternativ dazu kann ich die XSLT-Funktion "key()" verwenden, um auf ein beliebiges Element zuzugreifen, welches einen bestimmten Wert hat.
http://aktuell.de.selfhtml.org/tippstricks/xml/gruppierung1/index.htm
Das löst mein Problem, drängt mir aber eine weitere Frage auf:
key() funktioniert laut SELFHTML nur, wenn man alle Elemente haben möchte, die einen bestimmten Wert haben, z. B. alle a-Elemente, für die gilt: id="ABCDIEKATZELIGHTIMSCHNEE". Was aber, wenn man die gesuchten Elemente aufgrund von mehreren Eigenschaften einschränken möchte, z. B. alle a-Elemente für die gilt: id1="ABCDIEKATZELIGHTIMSCHNEE" sowie id2="RIRARUUNDDRAUSBISDU" ?Gibt's hierzu eine Lösung oder muss man das irgendwie händisch machen ?
z.B.
key match="*[@id ='ABCD'] | *[@id = 'EFG']" use="."
oder du erstellst zwei keys und verwendest diese dann für die Ausgabe.
Grüße
Thomas