2011-08-18 80 views
1

即时通讯寻找基于变量的值(每次迭代时都会改变)在模式中查找元素。捕捉是元素可以在模式内的任何地方。使用变量找到xpath元素

例如:

<... 
    <foo> 
    <bar> 
     <bar1>BB</bar1> 
     <bar2>CC</bar2> 
    </bar> 
    <rab> 
     <rab1>DD</rab1> 
    </rab> 
    </foo> 
/...> 

$属性= BAR1 (再下一个迭代,$属性可以等于RAB1)

如何将我写一个表达式,可以找我:.../foo/bar/$attribute

我能找到的最接近的东西是...//*[name()=$attribute],但它不起作用。有没有其他方法?

感谢您的帮助!

+0

您的XML是否包含名称空间(xmlns)? –

+0

“不起作用”太模糊。它会抛出一个错误吗?当有节点应该返回时,它是否返回节点? – LarsH

回答

2

虽然问题遗漏了大量的细节,可能是重要的,你可以尝试改变name()local-name()

...//*[local-name()='bar1'] 

,看看是否能解决问题。 name()的返回值包含元素名称所具有的任何前缀,这可能会导致其不匹配$attribute的值。 (@Kirill暗示了这一点。)

如果这样不能解决问题,请提供更多上下文:什么是完整的XPath表达式?它在XSLT中如何使用?你怎么知道它“不起作用”? (给出预期的结果和实际结果。)

+2

感谢您的全力帮助。 当我做了'//* [本地名()=字符串($属性)]' 它的工作 – David

+0

@David:我想知道'$ attribute'变量是否包含字符串以外的东西。我不认为这会有所作为,但很难说,不知道发生了什么意外的行为。 – LarsH

+1

@大卫你可以“接受”这个答案,因为它解决了你的问题。 – LarsH