我有一个项目列表,我希望每个项目都成为一个网址。
列表:
<root>
<tags>
<tag>open source</tag>
<tag>open</tag>
<tag>advertisement</tag>
<tag>ad</tag>
</tags>
</root>
XSLT:
<xsl:template match="*">
<div class="tags">
<xsl:for-each select="/post/tags/tag">
<a href="#">
<xsl:value-of select="//tag"/>
</a>
</xsl:for-each>
</div>
</xsl:template>
输出:
<div class="tags">
<a href="#">open source</a>
<a href="#">open source</a>
<a href="#">open source</a>
<a href="#">open source</a>
</div>
我做错了什么?
答案 0 :(得分:5)
更多XSLT做正确事情的方法是添加“标记”模板并修改原文:
<xsl:template match="*">
<div class="tags">
<xsl:apply-templates select="tag" />
</div>
</xsl:template>
<xsl:template match="tag">
<a href="#">
<xsl:value-of select="."/>
</a>
</xsl:template>
答案 1 :(得分:4)
您正在使用表达式值执行的操作是选择xml文档中的所有标记节点:
<xsl:value-of select="//tag"/>
这样做的结果是只有第一个选定的节点将用于该值。
您可以改用以下内容:
<xsl:value-of select="."/>
其中select =“。”将从for-each中选择当前节点。