<xsl:value-of select="$MyVar"/>
的作品,但
<xsl:value-of select="MyDataPfath/$MyVar"/>
不起作用。
我的代碼有什麼問題?
<xsl:value-of select="$MyVar"/>
的作品,但
<xsl:value-of select="MyDataPfath/$MyVar"/>
不起作用。
我的代碼有什麼問題?
從它的外觀來看,你試圖實現的是'動態評估'。 XSLT默認不支持XPath的動態評估,因此您需要使用擴展功能。
根據您的XSLT處理器,您可能需要查看EXSLT擴展。特別是動態模塊在http://www.exslt.org/dyn/index.html。這將允許做這樣的事情
<xsl:value-of select="dyn:evaluate('MyDataPfath/$MyVar')"/>
然而,在你的情況,也許是$ MyVar的只包含一個單一的元素名稱。在這種情況下,則可以將命令更改爲以下,這將不帶任何擴展功能
<xsl:value-of select="MyDataPfath/*[local-name() = $MyVar]"/>
是的,使用local-name()的解決方案適用於我。謝謝! –
您的代碼工作沒有失敗,這也正是規範說,它應該做的。這與你希望/想象它可能會做的不同。
您的希望/想象力是基於對XPath中變量性質的根本性誤解。 XPath變量不是宏。他們不通過文字替代工作;他們代表價值。如果變量$ E包含字符串「X」,那麼MyPath/$E
表示與MyPath/"X"
相同,這在XPath 1.0中是非法的,並且在XPath 2.0中返回與MyPath中的節點一樣多的字符串「X」的實例。
你可能打算MyPath/*[name()=$E]
它是不可能通過使用語法「MyDataPfath/$ MyVar的」以獲取價值。它不會識別正確的路徑。 假設$ MyVar的值爲'Hi'。所以它會被表示爲'MyDataPfath /「Hi」',這是你想要從XML中檢索的無效路徑。 刪除此限制,您可以使用name()或local-name()函數,可以使用,如下所示: 或
您可以共享您的XML架構/示例?你確定你的節點名是'MyDataPfath'嗎? –
'$ MyVar'存儲的是什麼 - 大概是節點的名字? – Utkanos
我很抱歉,我是新手。當然,我必須解釋上下文。 –