2011-11-23 44 views
2

我對xquery相當陌生,所以請耐心等待,因爲我試着最好地問這個問題。如何在Xquery中使用動態路徑表達式

當我用下面的語句(選擇序列),它工作得很好:

let $parts := doc("soap.xml")/soapenv:Envelope/soapenv:Body/ns0:PartDetails/ns0:partName 

這個加載的所有元素(序列)到$部分變量只是我怎麼想,但是。 ..

我想分配「/ns0:partName動態。我想通過所有的Qname函數認爲他們會幫助但沒有這樣的運氣。經過兩天的努力,我希望你們中的一個能夠指引我走向正確的方向。

回答

3

在你的路徑表達式中,你可以用*代替元素並添加謂詞來過濾結果,謂詞可以包含動態變量。例如:

*[local-name()=$someName and namespace-uri()=$someURI] 
+1

我能夠用「* [的節點名稱()匹配local-name()= $ someName]「部分,它工作得非常好。 tytyty! –

2

作爲一個簡單化文森特的答案,你可以只檢查一個xs:QName的節點

let $elementName = QName("urn:namespace", "PartDetails") 
... 
let $parts := doc("soap.xml")/soapenv:Envelope/soapenv:Body/*[node-name() = $elementName]/ns0:PartName