快速xslt for-each问题

时间:2009-11-13 19:22:21

标签: xml xslt

假设我有一个XML文档:

<keywords>
<keyword>test</keyword>
<keyword>test2</keyword>
<keyword>test3</keyword>
<keyword>test4</keyword>
</keywords>

我想使用XSLT在HTML中打印出来,如下所示:

<ul>
<li>test</li>
<li>test2</li>
<li>test3</li>
<li>test4</li>
</ul>

我的XSLT会是什么样子?我试过这个:

<ul>
<xsl:for-each select="keywords/keyword">
    <li><xsl:value-of select="keyword"/></li>
</xsl:for-each>
</ul>

但是这不会打印出关键字值,只是一个空白项目。

<ul>
<xsl:for-each select="keywords">
    <li><xsl:value-of select="keyword"/></li>
</xsl:for-each>
</ul>

不起作用(出于显而易见的原因),但至少打印出第一个关键字!

建议?谢谢!

2 个答案:

答案 0 :(得分:9)

我建议在这里避免使用for-each,并使用模板进行操作 - 它在XSLT中更为惯用,尤其是当您有一个明确的一对一映射时:

<xsl:template match="keyword">
    <li><xsl:value-of select="."/></li>
</xsl:template>

<xsl:template match="keywords">
    <ul><xsl:apply-templates/></ul>
</xsl:template>

答案 1 :(得分:5)

<ul>
<xsl:for-each select="keywords/keyword">    
  <li><xsl:value-of select="text()"/></li>
</xsl:for-each>
</ul>

使用text()可以获得关键字节点

中的文本