2010-06-18 69 views
2

XML文件名是特定的,但我需要构建一个动态路径。我试图使用一个变量来建立路径,但它没有工作:文档函数中的动态路径()

<xsl:variable name="path"> 
    ...conditional code 
</xsl:variable>  <xsl:value-of select="document('myXML.xml')/worksheets/$path"/> 

2.0解决方案好的。

+0

好问题(1)。请参阅我的回答以获取解释和解决方法。 – 2010-06-18 23:07:52

回答

1

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

+1

Dimitre的解决方案对于简单的表达式非常酷。我还使用EXLT的dynamic:evaluate函数为该主题添加了一个示例,它应该与Max在他的答案中提到的saxon:evaluate解决方案基本相同:http://stackoverflow.com/questions/3015942/retrieving-xml-节点从-A-路径指定的功能于一个属性 - 值的-另一节点/ 3017752#答案-3017543 – 2010-06-19 01:28:52

1

您需要一个扩展函数,XPath 2.0不支持动态编译/评估。撒克逊有saxon:evaluate。即使你的处理器不支持这种功能,你也许可以自己实现它作为扩展功能。

+0

我似乎无法获得saxon:evaluate()函数以使用document()函数。我得到一个静态错误xPath xPression。 johkar 2010-06-21 15:42:46

+0

@johkar:你的XPath表达式是错误的,你应该这样做:'saxon:evaluate (concat('document(\'myxml.xml')/',$ formPath))' – 2010-06-21 19:25:26

+0

@johkar:另外,saxon:evaluate函数在Professional和Enterprise版本上是可用的。 – 2010-06-21 19:27:09