XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XPath / XPath-Achsen / ancestor::*
![]() |
![]() |
➪ ancestor::* gibt die Liste aller vorhergehender Nodes aus, aber ohne den aktuellen Mensch-Node.
Auf dieser Seite:
<xsl:template match="/">
<ergebnis>
<xsl:for-each
select="/Orte/Ort[1]/Mensch[4]
/ancestor::*">
<e nr="{position()}">
<xsl:call-template name="generateXPath"/>
</e>
</xsl:for-each>
</ergebnis>
</xsl:template>
Das Resultat lautet dann:
<ergebnis>
<e nr="1">/Orte</e>
<e nr="2">/Orte/Ort[1]</e>
</ergebnis>
Siehe auch
Freilich erscheint der Zugriff etwas mißverständlich. Für folgenden XML Import:
<?xml version="1.0" encoding="utf-8" ?>
<A0>
<A1>
<A2>
<A3>
<A4>
<A5>
<A6>
<A7>
<A8>
<A9/>
</A8>
</A7>
</A6>
</A5>
</A4>
</A3>
</A2>
</A1>
</A0>
... und diesem XSLT-Quellcode:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/A0/A1/A2/A3">
<ergebnis>
<xsl:for-each select="./ancestor::*">
<Element>
<xsl:value-of select="name()"/>
</Element>
</xsl:for-each>
</ergebnis>
</xsl:template>
</xsl:stylesheet>
... lautet das Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
<Element>A0</Element>
<Element>A1</Element>
<Element>A2</Element>
</ergebnis>
Bei demselben XML-Input und folgendem XSLT-Code
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/A0/A1/A2/A3">
<ergebnis>
<xsl:for-each select="./ancestor::*[1]">
<Element>
<xsl:value-of select="name()"/>
</Element>
</xsl:for-each>
</ergebnis>
</xsl:template>
</xsl:stylesheet>
... lautet das Ergebnis dagegen (also nur der direkt vorhergehende Wert):
<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
<Element>A2</Element>
</ergebnis>
wg / 14. März 2021
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de