2013-03-12 50 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中進行,如果你真的想要的。)