0

在 for-each 循环中使用 xsl 变量时,我无法使用 x-path 正常访问 xml 数据(它循环正常)。尝试在循环外访问相同的数据时没有问题。

例子:

<xsl:variable name="teams">
        <team name="Team one" cg_id="155370" homepage="http://www.teamone.com" enabled="true" />
        <team name="Team two" cg_id="430906" homepage="http://www.teamtwo.com" enabled="true" />
</xsl:variable>

<xsl:for-each select="document('')/*/xsl:variable[@name='teams']/team[@active='true']">

    <xsl:value-of select="/DATA/ITEMS/ITEM/HEADERTXT" />

</xsl:for-each>

我正在使用 saxon-he 9.3.0.5 (Kernow 1.7.2)

我在这里想念什么?

4

1 回答 1

2

那么路径/选择当前上下文节点的根节点(文档节点)。当您使用两个文档时,主要输入文档和样式表文档,并且您使用for-each来访问样式表文档中的节点,您需要将主文档存储在for-each例如

<xsl:variable name="primary-doc" select="/"/>

然后在 for-each 你可以使用

<xsl:value-of select="$primary-doc/DATA/ITEMS/ITEM/HEADERTXT" />

这就是为什么您的代码没有执行您想要的操作以及如何解决处理多个文档的问题的解释。

然而,使用带有节点的变量但随后访问它的整个方法document('')看起来相当奇怪,如果您有一个$teams带有临时文档的变量(您在 XSLT 2.0 中执行),您可以简单地执行

<xsl:for-each select="$teams/team[@active='true']">
  <xsl:value-of select="$primary-doc/DATA/ITEMS/ITEM/HEADERTXT"/>
</xsl:for-each>

当然,对于两个文档,您需要确保存储另一个文档,而不是存储在 for-each 更改上下文节点和文档之外的变量中。

于 2012-05-29T17:26:30.417 回答