在 XSLT 中,嵌套的 foreach 循环总是 return 第一个元素
In XSLT nested foreach loop always return first element
XLST 在下面的格式中从 apache-camel 接收日期。
数据格式
<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 总是 returns 第一个元素。
<tag1>test1<tag1>
<tag1>test1<tag1>
上面的 xslt 有什么问题,请帮助生成包含所有元素的 xml。
因为路径表达式以“//”开头 select 从文档树的根开始,您每次在 xsl:value-of
中都 select 使用相同的节点;在 XSLT 1.0 中,如果您 select 多个节点,则只显示第一个节点。
我认为您正在使用“//”,因为您已经在示例代码中看到它但实际上并不理解它的含义...
在 xsl:for-each
内,您通常需要 select 来自 for-each 当前正在处理的节点的相对路径。
您也可能从其他人的代码中习得了这个 *[local-name()='linked-hash-map']
习惯。由于不涉及名称空间,您可以安全地将其替换为 linked-hash-map
.
XLST 在下面的格式中从 apache-camel 接收日期。
数据格式
<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 总是 returns 第一个元素。
<tag1>test1<tag1>
<tag1>test1<tag1>
上面的 xslt 有什么问题,请帮助生成包含所有元素的 xml。
因为路径表达式以“//”开头 select 从文档树的根开始,您每次在 xsl:value-of
中都 select 使用相同的节点;在 XSLT 1.0 中,如果您 select 多个节点,则只显示第一个节点。
我认为您正在使用“//”,因为您已经在示例代码中看到它但实际上并不理解它的含义...
在 xsl:for-each
内,您通常需要 select 来自 for-each 当前正在处理的节点的相对路径。
您也可能从其他人的代码中习得了这个 *[local-name()='linked-hash-map']
习惯。由于不涉及名称空间,您可以安全地将其替换为 linked-hash-map
.