Mega Code Archive

 
Categories / XML Tutorial / Xpath
 

Lists all children of each element in the source

File: Data.xml <?xml version="1.0" encoding="utf-8"?> <data>     <AAA>       <BBB id="b1">         <CCC name="q" size="12"/>         <EEE id="e1">           <SSS/>         </EEE>         <CCC weight="45"/>         <CCC/>       </BBB>     </AAA>     <AAA>       <EEE id="e2"/>       <CCC>         <DDD/>       </CCC>     </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="/">       <xsl:for-each select="/descendant::*">         <xsl:variable name="pos" select="position()"/>         <xsl:variable name="name" select="name()"/>         <xsl:if test="not(/descendant::*[position() &lt; $pos and name()= $name])">           <Paragraph>             <xsl:value-of select="$name"/>             <xsl:text> [</xsl:text>             <xsl:for-each select="//*[name()=$name]/*">               <xsl:variable name="p" select="position()"/>               <xsl:if test="not(//*[name()=$name]/*[position()&lt; $p and name()=name(current())])">                 <xsl:value-of select="name()"/>                 <xsl:text>, </xsl:text>               </xsl:if>             </xsl:for-each>             <xsl:text>]</xsl:text>           </Paragraph>         </xsl:if>       </xsl:for-each>     </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><Paragraph>data [AAA, ]</Paragraph><Paragraph>AAA [BBB, ]</Paragraph><Paragraph>BBB [CCC, EEE, ]</Paragraph><Paragraph>CCC [DDD, ]</Paragraph><Paragraph>EEE [SSS, ]</Paragraph><Paragraph>SSS []</Paragraph><Paragraph>DDD []</Paragraph>