2016-11-14 67 views
0

我有問題。 是否有任何簡單的方法通過使用xslt廣告獨特的ID? 如果另一個主題集嵌套,則元素topicset喊話只會獲得一個id。 爲了支持我的問題,這裏是一個例子。將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> 

非常感謝

+0

答案會因XSLT 1到XSLT 2處理器而異。最簡單最簡單的就是'generate-id()'。但是這個ID在當前的xml中是唯一的,並且與相同的xml相同。如果這沒有問題,那就去做吧。 – uL1

回答

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

+0

謝謝,那正是我在尋找的 – Olli