2013-03-12 56 views
0

我正在编写一个库,用于生成复杂的XQuery表达式,该表达式针对来自两个不同名称空间的文档。但是,当我生成查询时,我不知道每个元素的特定命名空间,因此我目前正在生成两种可能组合的分离:针对多个命名空间的XQuery

// * [ns1:foo/ns1:bar =“某些条件”或ns2:foo/ns2:bar =“某些条件”]

是否有任何方法可以更好地生成此表达式,并且在性能方面更优化?

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

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

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

// * [富/栏=“某些条件“]

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

+0

将沿东西''* [local-name()='foo']/bar [* condition here *]'的行就够了吗? – JWiley 2013-03-12 15:10:12

回答

0

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

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

(复制文件,同时改变所有的命名空间的URI - 或任何这样的算法转型 - 在XSLT比XQuery中更容易,但它可以在XQuery中进行,如果你真的想要的。)