XML文件名是特定的,但我需要構建一個動態路徑。我試圖使用一個變量來建立路徑,但它沒有工作:文檔函數中的動態路徑()
<xsl:variable name="path">
...conditional code
</xsl:variable> <xsl:value-of select="document('myXML.xml')/worksheets/$path"/>
2.0解決方案好的。
XML文件名是特定的,但我需要構建一個動態路徑。我試圖使用一個變量來建立路徑,但它沒有工作:文檔函數中的動態路徑()
<xsl:variable name="path">
...conditional code
</xsl:variable> <xsl:value-of select="document('myXML.xml')/worksheets/$path"/>
2.0解決方案好的。
XSLT 1.0或XSLT 2.0標準不支持評估任何動態生成的XPath表達式。它將在XSLT 2.1中得到支持。
如果動態生成的XPath表達式是不太複雜,在此答案的技術可以成功地使用:
Retrieving XML node from a path specified in an attribute value of another node
Dimitre的解決方案對於簡單的表達式非常酷。我還使用EXLT的dynamic:evaluate函數爲該主題添加了一個示例,它應該與Max在他的答案中提到的saxon:evaluate解決方案基本相同:http://stackoverflow.com/questions/3015942/retrieving-xml-節點從-A-路徑指定的功能於一個屬性 - 值的-另一節點/ 3017752#答案-3017543 – 2010-06-19 01:28:52
您需要一個擴展函數,XPath 2.0不支持動態編譯/評估。撒克遜有saxon:evaluate
。即使你的處理器不支持這種功能,你也許可以自己實現它作爲擴展功能。
我似乎無法獲得saxon:evaluate()函數以使用document()函數。我得到一個靜態錯誤xPath xPression。
@johkar:你的XPath表達式是錯誤的,你應該這樣做:'saxon:evaluate (concat('document(\'myxml.xml')/',$ formPath))' – 2010-06-21 19:25:26
@johkar:另外,saxon:evaluate函數在Professional和Enterprise版本上是可用的。 – 2010-06-21 19:27:09
好問題(1)。請參閱我的回答以獲取解釋和解決方法。 – 2010-06-18 23:07:52