在xsl-variable for-each循环内部时,无法访问xml数据

时间:2012-05-29 17:10:00

标签: xslt saxon

在for-each循环中使用xsl-varible时,我无法使用x-path normaly访问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)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

路径/选择当前上下文节点的根节点(文档节点)。当您使用两个文档时,主要输入文档以及样式表文档,并使用for-each访问样式表文档中的节点,您需要将主文档存储在{{1}之外例如

for-each

然后在for-each里面你可以使用

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

这就是为什么你的代码没有做你想做的以及如何解决使用多个文档的问题的原因。

然而,如果你有一个带有临时文档的变量<xsl:value-of select="$primary-doc/DATA/ITEMS/ITEM/HEADERTXT" /> (你在XSLT 2.0中做),那么使用带有节点但随后用document('')访问它的变量的整个方法看起来很奇怪你可以简单地做到

$teams

当然,对于两个文档,您需要确保存储除了已经显示在for-each之外的变量中的其他文档,而不是更改上下文节点和文档。