将id设置为嵌套元素

时间:2016-11-14 11:08:17

标签: xml xslt

我有一个问题。 使用xslt来识别唯一ID有什么简单的方法吗? 如果嵌套了另一个主题集,则元素主题集shout仅获取id。 为了支持我的问题,这是一个例子。

源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>

结果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>

非常感谢

1 个答案:

答案 0 :(得分:1)

正如评论中所指出的,您可以在XSLT(所有版本)中使用generate-id()为节点生成唯一的ID值:

<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>

请参阅http://xsltransform.net/94AbWB8上的在线示例。