我对xquery很新,所以请耐心等待,因为我最好问这个问题。
当我使用以下语句(选择序列)时,它可以正常工作:
let $parts := doc("soap.xml")/soapenv:Envelope/soapenv:Body/ns0:PartDetails/ns0:partName
这会将所有元素(作为序列)加载到$ parts变量中,只是我想要的但是......
我想动态分配“/ns0:partName
” 。我通过所有Qname函数认为他们会以某种方式帮助但没有这样的运气。经过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