Xslt 使用变量查找xpath元素
我希望根据变量的值(每次迭代时都会更改)在模式中查找元素。关键是元素可以位于模式中的任何位置 例如:Xslt 使用变量查找xpath元素,xslt,xpath,Xslt,Xpath,我希望根据变量的值(每次迭代时都会更改)在模式中查找元素。关键是元素可以位于模式中的任何位置 例如: <... <foo> <bar> <bar1>BB</bar1> <bar2>CC</bar2> </bar> <rab> <rab1>DD</rab1> </rab> <
<...
<foo>
<bar>
<bar1>BB</bar1>
<bar2>CC</bar2>
</bar>
<rab>
<rab1>DD</rab1>
</rab>
</foo>
/...>
$attribute=bar1
(那么下一次迭代,$attribute可能等于rab1)
如何编写一个可以找到我的表达式:../foo/bar/$attribute
我能找到的最接近的东西是../*[name()=$attribute]
,但它不起作用。还有别的办法吗
谢谢你的帮助 尽管问题遗漏了许多可能很重要的细节,但您可以尝试将
name()
更改为local-name()
:
看看这是否能解决问题。name()
的返回值包含元素名称的任何前缀,这可能导致它与$attribute
的值不匹配。(@Kirill正在暗示这一点。)
如果这不能解决问题,请提供更多上下文:什么是完整的XPath表达式?它是如何在XSLT中使用的?你怎么知道它“不起作用”?(给出预期结果和实际结果。)您的XML是否包含名称空间(XMLN)?“不工作”太含糊了。它会抛出错误吗?当有节点时,它是否不返回任何节点?谢谢您的帮助。当我执行
/*[local-name()=string($attribute)]
时worked@David:我想知道$attribute
变量是否包含字符串以外的内容。我不认为这会有什么不同,但如果不知道发生了什么意外行为,很难说。@David你可以“接受”这个答案,因为它解决了你的问题。
...//*[local-name()='bar1']