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']