如何在xsl中为锚标记动态分配名称和href

时间:2011-11-11 09:55:37

标签: xslt

我有一个要求,其中xml可能有一个或多个服务(名称可能不同),并且我的内容应该包含xml中所有这些可用的服务,如下所示

<li><a href="#_cms">CMS</a></li>
<li><a href="#_dis">DIS</a></li>

但是上面我已经对a标记内容和href进行了硬编码,因为我知道这些是值,但实时我不会知道这些名称,所以如何设置{{1} }和href基于xml值?

到目前为止,我得到了以下anchor tag contents语句,它从xml获取了所有服务名称

for-each

但它似乎不起作用,它给了我所有的服务,但链接不起作用。还有其他想法吗?

注意:我从this question link获得了有类似要求的帮助。

3 个答案:

答案 0 :(得分:1)

有一个xslt函数generate-id(),它为xml中的任何节点提供唯一的文本标识符。

http://www.w3.org/TR/xslt#function-generate-id

答案 1 :(得分:1)

使用类似下面的内容,应该可以使用

<xsl:for-each select="csmclient/product/domainmetadata/domainmetadata_service">
    <li><a href="#{generate-id()}"><xsl:value-of select="@name"/></a></li>
</xsl:for-each>

<xsl:for-each select="domainmetadata/domainmetadata_service">
    <h3>Service Name: <span style="color:#328aa4"><a name="{generate-id()}" href="#_top"><xsl:value-of select="@name"/></a></span></h3>
</xsl:for-each> 

答案 2 :(得分:0)

 <li><a href="#_ser{$number}"><xsl:value-of select="@name"/><xsl:value-of select="position()"/></a></li>
     

但它似乎不起作用......

你要写的是这个(如果这个唯一标识节点的话,根本不讨论):

<li>
  <a href="#_ser{$number}{@name}{position()}"/>
</li> 
相关问题