Mega Code Archive

 
Categories / XML Tutorial / Xpath
 

For-each select=ancestor

File: Data.xml <?xml version="1.0" encoding="utf-8"?> <data>     <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> </data> 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="/">       <table>         <tr>           <th colspan="2">Axis: ancestor</th>         </tr>         <tr>           <td>Element</th>           <td>Node-set</th>         </tr>         <xsl:for-each select="/source//*">           <xsl:call-template name="print"/>         </xsl:for-each>       </table>     </xsl:template>     <xsl:template name="print">       <tr>         <td>           <xsl:value-of select="name()"/>           <xsl:text> id = </xsl:text>           <xsl:value-of select="./@id"/>         </td>         <td>           <xsl:for-each select="ancestor::*">             <xsl:if test="not(@id)">               <xsl:value-of select="name()"/>             </xsl:if>             <xsl:value-of select="./@id"/>             <xsl:text/>           </xsl:for-each>         </td>       </tr>     </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><table><tr><th colspan="2">Axis: ancestor</th></tr><tr><td>Element</th><td>Node-set</th></tr></table>