2012-02-13 85 views
1

我試圖在具有多個名稱空間的文檔上使用XPath查詢,並且需要定義一個NamespaceContext。檢索所有可以想到的名稱空間的唯一方法是遍歷所有節點和屬性,並顯式地收集它們的名稱空間URI和前綴。這看起來效率很低,我懷疑這是最好的做法。如何確定XML文檔中的所有名稱空間

應該怎麼做?
謝謝

+0

爲什麼您需要檢索所有名稱空間URI?在構建查詢時,您最好事先知道名稱空間(並且使用的實際前綴是不相關的);否則查詢有什麼用處? – 2012-02-13 16:01:59

+0

@四十二我想這樣做模擬內部XPathAPI,似乎透明地處理命名空間。所以我構建了一個Util來消除傳遞名稱空間數據的需要,但我不確定最佳方法。 – kostja 2012-02-13 16:07:15

+0

哪個內部XPathApi是? – 2012-02-13 16:14:15

回答

2

由於名稱空間既可以在XML文檔的頭文件中定義,也可以在元素本身中定義,您是正確的;如果您需要文檔中使用的EVERY命名空間,則需要處理整個文檔(如果想要100%完整地包括所有導入)。

如果您希望人們能夠像使用XPath-esque查詢的數據庫一樣查詢您的文檔,則可能需要將文檔加載到可快速查詢的內存中表示中。

鑑於您必須將整個事件處理成內存,那將是您解析所有命名空間的機會。

注意:我忽略了「爲什麼」您需要所有命名空間,我只是假設您需要它們,在這種情況下,您對處理整個文檔的假設是正確的。

+0

謝謝。面對這些問題,我不太確定我是否需要他們 - 我認爲這是我必須這樣做的。但是我會檢查一下,如果沒有名稱空間感知,我可以獲得什麼結果。如果我畢竟不需要它們的話 - 很好的解決方案。 – kostja 2012-02-13 19:02:46

相關問題