我正在编写一个库来生成复杂的XQuery表达式,这些表达式针对来自两个不同命名空间的文档。但是,当我生成查询时,我不知道我必须查询的每个元素的特定命名空间,所以我当前正在生成两种可能组合的分离:
// * [ns1:foo / ns1:bar =“some condition”或ns2:foo / ns2:bar =“some condition”]
有没有办法在性能方面更好地生成这个表达式?
我找到的一个可能的解决方案是使用:
声明默认元素名称空间“*”
在这种情况下,我可以简单地生成:
// * [foo / bar =“some condition”]
但看起来可能会增加额外的性能开销,因为我无法在那里枚举两个可能的命名空间而是使用通配符。
答案 0 :(得分:0)
我必须编写一个处理输入源的两个变体的查询的常用方法是首先使输入被规范化以消除变化,然后在规范化输入上运行主查询。 / p>
这样做的一个优点是规范化步骤是可重用的 - 它可以用于您想要进行的任何后续处理。
(在更改所有命名空间URI时复制文档 - 或者实际上任何这样的算法转换 - 在XSLT中比在XQuery中更容易,但如果你真的想要,可以在XQuery中完成。)