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

问题描述 投票:0回答:1

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>

输出总是返回第一个元素。

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

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

xslt xslt-1.0
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.