2

我对 xquery 还很陌生,所以请多多包涵,因为我会尽力提出这个问题。

当我使用以下语句(选择序列)时,它工作得很好:

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

这将所有元素(作为一个序列)加载到 $parts 变量中,就像我想要的那样,但是......

我想动态/ns0:partName分配“ ” 。我浏览了所有 Qname 函数,以为它们会有所帮助,但没有这样的运气。经过两天的挣扎,我希望你们中的一个人能指出我正确的方向。

4

2 回答 2

3

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

*[local-name()=$someName and namespace-uri()=$someURI]
于 2011-11-23T10:58:00.483 回答
2

作为对文森特答案的简化,您只需检查 xs:QName 是否与节点的 node-name() 匹配

let $elementName = QName("urn:namespace", "PartDetails")
...
let $parts := doc("soap.xml")/soapenv:Envelope/soapenv:Body/*[node-name() = $elementName]/ns0:PartName
于 2011-11-23T18:12:23.583 回答