XML Tutorial/XPath/following
following axis contains all nodes that come after the context node, but excludes all descendant nodes.
<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="/">
Axis: following | |
---|---|
Element</th>
<td>Node-set</th> |
Axis: following | |
---|---|
Element</th><td>Node-set</th> |
</xsl:template> <xsl:template match="*"> <xsl:if test="not(descendant::*[name()=name(current())] | following::*[name()=name(current())])"> <TR> <TD> <xsl:value-of select="name()"/> </TD> <TD> <xsl:apply-templates select="." mode="list"/> </TD> </TR> </xsl:if> </xsl:template> <xsl:template match="*" mode="list"> <xsl:for-each select="//*[name()=name(current())]/*"> <xsl:value-of select="name()"/> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output:
<?xml version="1.0" encoding="UTF-8"?>data | AAAAAA |
BBB | CCCEEECCCCCC |
SSS | |
AAA | BBBEEECCC |
EEE | SSS |
CCC | DDDDDD |
DDD |