0

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

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

于 2013-03-12T18:32:47.703 回答