快速xslt for-each问题

Law*_*nce 0 xml xslt

假设我有一个包含以下内容的XML文档:

<keywords>
<keyword>test</keyword>
<keyword>test2</keyword>
<keyword>test3</keyword>
<keyword>test4</keyword>
</keywords>
Run Code Online (Sandbox Code Playgroud)

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

<ul>
<li>test</li>
<li>test2</li>
<li>test3</li>
<li>test4</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

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

<ul>
<xsl:for-each select="keywords/keyword">
    <li><xsl:value-of select="keyword"/></li>
</xsl:for-each>
</ul>
Run Code Online (Sandbox Code Playgroud)

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

<ul>
<xsl:for-each select="keywords">
    <li><xsl:value-of select="keyword"/></li>
</xsl:for-each>
</ul>
Run Code Online (Sandbox Code Playgroud)

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

建议?谢谢!

Pav*_*aev 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>
Run Code Online (Sandbox Code Playgroud)

  • 同意.尽可能避免"为每个人". (2认同)

dna*_*irl 5

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

使用text()可以获得关键字节点内的文本

  • 实际上,在这种情况下,使用`select ="."`也可以工作(节点将被雾化,这实际上意味着所有级别上所有嵌套文本节点的值的串联). (5认同)