Reputation: 89
I have a question. Is there any easy way by using xslt to ad unique ids? The element topicset shout only get an id if another topicset is nested. To support my question, here is an example.
Source XML
<topicset>
<topicset>
<topicmeta></topicmeta>
<topicset>
<topicmeta></topicmeta>
</topicset>
</topicset>
<topicset>
<topicmeta></topicmeta>
</topicset>
</topicset>
<topicset>
<topicmeta></topicmeta>
</topicset>
<topicset>
<topicmeta></topicmeta>
<topicset>
<topicmeta></topicmeta>
</topicset>
</topicset>
Result XML
<topicset id="m54845">
<topicset id="m54t45">
<topicmeta></topicmeta>
<topicset>
<topicmeta></topicmeta>
</topicset>
</topicset>
<topicset>
<topicmeta></topicmeta>
</topicset>
</topicset>
<topicset>
<topicmeta></topicmeta>
</topicset>
<topicset id="m548z5">
<topicmeta></topicmeta>
<topicset>
<topicmeta></topicmeta>
</topicset>
</topicset>
Thanks alot
Upvotes: 0
Views: 56
Reputation: 167436
As pointed out in a comment, you can use generate-id()
in XSLT (all versions) to generate a unique ID value for a node:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="topicset[topicset]">
<topicset id="{generate-id()}">
<xsl:apply-templates select="@* | node()"/>
</topicset>
</xsl:template>
</xsl:transform>
See online sample at http://xsltransform.net/94AbWB8.
Upvotes: 1