【问题标题】:How to use a dynamic path expression in Xquery如何在 Xquery 中使用动态路径表达式
【发布时间】:2011-11-23 02:09:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: path expression xquery dynamic assign


    【解决方案1】:

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

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

    【讨论】:

    • 我可以使用 "*[local-name()=$someName]" 部分,而且效果很好。 tytyty!
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多