在XSLT中,嵌套的foreach循环始终返回第一个元素

时间:2020-02-29 12:01:38

标签: xslt xslt-1.0

XLST从甲酸盐以下的阿帕奇骆驼那里获得日期。

数据格式

<list>
  <linked-hash-map>
    <entry key="NAME">test1</entry>
  </linked-hash-map>
  <linked-hash-map>
    <entry key="NAME">test2</entry>
  </linked-hash-map>
</list>

我的XSLT:

<xsl:stylesheet>
  <xsl:template match="*">
      <xsl:for-each select="//*[local-name()='linked-hash-map']">
       <tag1>
            <xsl:value-of select="string(//*[local-name()='entry'][@key='NAME'])"/>
       </tag1t>
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

OUTPUT始终返回第一个元素。

<tag1>test1<tag1>
<tag1>test1<tag1>

xslt上面的问题是什么,并帮助生成具有所有元素的xml。

1 个答案:

答案 0 :(得分:1)

由于从文档树的根目录中选择以“ //”开头的路径表达式,因此每次xsl:value-of中都选择相同的节点;在XSLT 1.0中,如果选择多个节点,则仅显示第一个节点。

认为您使用的是“ //”,因为您已经在示例代码中看到了它,但实际上并没有理解它的含义...

xsl:for-each中,通常需要一个相对路径,该路径是从for-each当前正在处理的节点中选择的。

您也可能已经从其他人的代码中养成了这个*[local-name()='linked-hash-map']习惯。在不涉及名称空间的情况下,您可以安全地将其替换为linked-hash-map