2011-06-06 31 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>