Mega Code Archive

 
Categories / XML / XSLT StyleSheet
 

Match=@node()

File: Data.xml <chapter>   <para>para1</para>   <figure>     <title>title 1</title>     <graphic fileref="pic1.jpg" />   </figure>   <para>para2</para>   <sect1>     <para>para3</para>     <figure>       <title>"He Lights"</title>       <graphic fileref="pic2.jpg" />     </figure>     <para>line 1</para>     <sect2>       <para>line 2</para>       <figure>         <title>title 2</title>         <graphic fileref="pic1.jpg" />       </figure>     </sect2>   </sect1> </chapter> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   version="1.0">   <xsl:output method="xml" omit-xml-declaration="yes" />   <xsl:template match="chapter | sect1 | sect2">     <xsl:copy>       <xsl:attribute name="uid">         <xsl:value-of select="generate-id(.)" />       </xsl:attribute>       <xsl:apply-templates select="@*|node()" />     </xsl:copy>   </xsl:template>   <xsl:template match="@*|node()">     <xsl:copy>       <xsl:apply-templates select="@*|node()" />     </xsl:copy>   </xsl:template> </xsl:stylesheet> Output: <chapter uid="d2e1">   <para>para1</para>   <figure>     <title>title 1</title>     <graphic fileref="pic1.jpg"/>   </figure>   <para>para2</para>   <sect1 uid="d2e17">     <para>para3</para>     <figure>       <title>"He Lights"</title>       <graphic fileref="pic2.jpg"/>     </figure>     <para>line 1</para>     <sect2 uid="d2e33">       <para>line 2</para>       <figure>         <title>title 2</title>         <graphic fileref="pic1.jpg"/>       </figure>     </sect2>   </sect1> </chapter>