2011-03-11 68 views
2

for-each语句中,我想为每个匹配的节点生成ID。似乎无法使用XSLT中的generate-id工作

鉴于一些XML文件:

<event attr1="qwertz"> 
    <test>Test</test> 
</event> 
<event attr1="asdfg"> 
    <test>Test</test> 
</event> 

...和以下规则:

<xsl:for-each select="event"> 
    <xsl:element name="event"> 
    <xsl:attribute name="id">id/{generate-id(test)}</xsl:attribute> 
    </xsl:element> 
</xsl:for-each> 

我总是得到这样的:

<event id="id/generate-id(test)"/> 
<event id="id/generate-id(test)"/> 
<event id="id/generate-id(test)"/> 
... 

什么是正确的语法在XSLT中调用这个函数?提前致谢!

回答

2

用途:

<event id="id/{generate-id(test)}"/> 

或者冗长:

<xsl:element name="event"> 
    <xsl:attribute name="id"> 
     <xsl:text>id/<xsl:text> 
     <xsl:value-of select="generate-id(test)"/> 
    </xsl:attribute> 
</xsl:element> 

注意:属性值模板仅用于文字结果元素和仅XSLT指令某些属性。

+0

干杯,完美的作品! – slhck 2011-03-11 13:59:46

+0

@slhck:我很高兴这很有帮助。 – 2011-03-11 14:00:35