<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 :(得分: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>