【问题标题】:XQuery targeting multiple namespaces针对多个名称空间的 XQuery
【发布时间】:2013-03-12 14:27:04
【问题描述】:

我正在编写一个库来生成复杂的 XQuery 表达式,这些表达式以来自两个不同名称空间的文档为目标。但是,当我生成查询时,我不知道我必须查询的每个元素的特定命名空间,所以我目前正在生成两种可能组合的析取:

//*[ns1:foo/ns1:bar = "一些条件" or ns2:foo/ns2:bar = "一些条件"]

有没有什么方法可以更好地生成这个表达式并在性能方面更优化?

我发现的一个可能的解决方案是使用:

声明默认元素命名空间“*”

在这种情况下,我可以简单地生成:

//*[foo/bar = "某些条件"]

但看起来这可能会增加额外的性能开销,因为我无法枚举那里的两个可能的命名空间并改用通配符。

【问题讨论】:

  • 类似//*[local-name()='foo']/bar[*condition here*] 的东西就够了吗?

标签: xml xpath namespaces xquery


【解决方案1】:

我通常的方法是编写一个处理输入源的两个变体的查询,首先是对输入进行标准化以消除变化的阶段,然后在标准化输入上运行主查询。

这样做的一个优点是标准化步骤是可重复使用的 - 它可以用于您想要执行的任何后续处理。

(在更改所有名称空间 URI 的同时复制文档 - 或者实际上任何此类算法转换 - 在 XSLT 中比在 XQuery 中更容易,但如果您真的需要,可以在 XQuery 中完成。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多