2011-06-06 39 views
1
<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中测试一个元素。有没有办法引用输入文档?如何在外部文档的上下文中引用输入文档上下文?

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

+0

问得好,+1。查看我的答案,获得方便和简单的解决方案。 :) – 2011-06-06 04:19:31

回答

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> 
相关问题