2011-09-08 40 views
1

我有元素上有和沒有前綴的XML,但沒有爲它們中的任何元素定義名稱空間。當我嘗試加載它時,它給了我一個XDocument.Load錯誤(至少,我認爲這就是它發生的地方),某些前綴沒有被定義。有沒有辦法告訴框架忽略任何命名空間前綴?我使用LINQ to XML,但如果可用的話可以使用其他的東西。查詢XML而不擔心名稱空間

我不一定會預先定義它們,因爲我將要處理各種文件,這些文件可能有也可能沒有定義前綴,也沒有明確的xmlns聲明。

+0

請參閱http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –

+4

處理XML而不用擔心名稱空間等同於「處理XML而不用擔心XML「。 –

+0

是的。我同意,但這是一個基於XML的文檔,我只需要擔心標籤。 –

回答

2

不是前綴應該表示名稱空間的縮寫嗎?我相信在處理它之前,需要清理那些沒有與它們關聯的名稱空間的前綴,因爲它不是有效的XML。一個快速的正則表達式來替換</prefix的所有前綴:< /:和<前綴:<應該這樣做。

要做到這一點,先用</<.*?:<替換下面的正則表達式匹配 </.*?:(不改變順序)。

+0

好主意,我可能會改用這條路線。 –

1

你想做的事,可以使用XmlDocument什麼的一種方法:

XmlDocument d = new XmlDocument(); 
using (var textReader = new XmlTextReader(@"test.xml")) 
{ 
    textReader.Namespaces = false; 
    d.Load(textReader); 
} 

你將失去​​使用LINQ的語法,以XML查詢數據的能力。

實際上,你可以使用LINQ到XML和文件中的如下因素線

nameSpaceManager.AddNamespace("prefixName", "urn:ignore"); 其中nameSpaceManagerXmlNamespaceManager類型設置爲每個前綴忽略的命名空間。 但從你的問題我覺得這不是一個合理的解決方案。

+0

它可能是。謝謝 –