2011-08-18 78 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