如何在Xquery中使用动态路径表达式

时间:2011-11-23 02:09:19

标签: path expression xquery dynamic assign

我对xquery很新,所以请耐心等待,因为我最好问这个问题。

当我使用以下语句(选择序列)时,它可以正常工作:

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

这会将所有元素(作为序列)加载到$ parts变量中,只是我想要的但是......

我想动态分配“/ns0:partName 。我通过所有Qname函数认为他们会以某种方式帮助但没有这样的运气。经过2天的挣扎,我希望你们中的一个能指出我正确的方向。

2 个答案:

答案 0 :(得分:3)

在路径表达式中,可以用*替换元素并添加谓词以过滤结果,谓词可能包含动态变量。例如:

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

答案 1 :(得分:2)

作为vincent答案的简单,您可以检查xs:QName是否与节点的node-name()匹配

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