<xslTutorial creator="nicmila@idoox.com">
<index keywords="generate-id() xsl:copy xsl:attribute"/>

<description>Function generate-id generates id conforming to XML spec. <stylesheet id='id3'/> uses this function to add id to all elements in source XML.  </description>

<xmlSource id="id1">
<AAA name='top'>
      <BBB pos='1' val='bbb'>11111</BBB>
      <BBB>22222</BBB>
</AAA>               
 <AAA name='bottom'>
       <BBB>33333</BBB>
      <BBB>44444</BBB>
</AAA>

</xmlSource>

<attValues>
<value match="">
</value>
</attValues>

<xslStylesheet id="id2">

<xsl:template match="/">
<DIV><B><xsl:text>generate-id(//AAA)     : </xsl:text></B>
<xsl:value-of select="generate-id(//AAA)     "/></DIV>
<DIV><B><xsl:text>generate-id(//BBB)     : </xsl:text></B>
<xsl:value-of select="generate-id(//BBB)     "/></DIV>
<DIV><B><xsl:text>generate-id(//AAA[1])     : </xsl:text></B>
<xsl:value-of select="generate-id(//AAA[1])     "/></DIV>
<DIV><B><xsl:text>generate-id(//*[1])     : </xsl:text></B>
<xsl:value-of select="generate-id(//*[1])     "/></DIV>
<DIV><B><xsl:text>generate-id(//xslTutorial/*[1])     : </xsl:text></B>
<xsl:value-of select="generate-id(//xslTutorial/*[1])     "/></DIV>
</xsl:template>
</xslStylesheet>

<xslStylesheet id="id3">

<xsl:template match="*">
<xsl:copy select=".">
<xsl:attribute name="id">
<xsl:value-of select="generate-id()"/>
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>

</xsl:template>

</xslStylesheet>

</xslTutorial>