XML Tutorial/XPath/ancestor or self
ancestor-or-self axis includes all nodes in the ancestor axis plus the context node (which is in the self axis).
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="utf-8"?>
<AAA id="a1" pos="start"> <BBB id="b1"/> <BBB id="b2"/> </AAA> <AAA id="a2"> <BBB id="b3"/> <BBB id="b4"/> <CCC id="c1"> <CCC id="c2"/> </CCC> <BBB id="b5"> <CCC id="c3"/> </BBB> </AAA>
File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">
</xsl:template> <xsl:template name="print"> <xsl:value-of select="name()"/> <xsl:text> id = </xsl:text> <xsl:value-of select="./@id"/> <xsl:for-each select="ancestor-or-self ::*"> <xsl:if test="not(@id)"> <xsl:value-of select="name()"/> </xsl:if> <xsl:value-of select="./@id"/> <xsl:text/> </xsl:for-each> </xsl:template>
</xsl:stylesheet></source>