如何在外部文档的上下文中引用输入文档上下文?

时间:2011-06-06 03:53:32

标签: xslt xpath

<xsl:template match="extnode">
    <xsl:if test="/topnode/value">

    </xsl:if>
</xsl:template>

<xsl:template match="/">
     <xsl:apply-template select="document('external.xml')/exttopnode/extnode"/>
</xsl:template>

在上面的示例中,第2行(xsl:if)的上下文将与document('external.xml')相关。但我真正想要的是从输入XML测试一个元素。有没有办法引用输入文档?

目前我被迫将输入文档的整个节点树作为参数传递给模板,我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:2)

  

在上面的示例中,上下文   第2行(xsl:if)将受到尊重   到document('external.xml')。但   我真正想要的是测试一个   输入XML中的元素。有没有   方式来参考输入文件?

每当我发现自己处于这种情况时,我更喜欢拥有一个全局变量(比如名为$vMainDoc),它可以在整个转换过程中的任何位置访问,而无需传递参数:

<xsl:variable name="vMainDoc" select="/"/>

然后您的代码将变为

<xsl:template match="extnode">
    <xsl:if test="$vMainDoc/topnode/value">

    </xsl:if>
</xsl:template>