我有元素上有和沒有前綴的XML,但沒有爲它們中的任何元素定義名稱空間。當我嘗試加載它時,它給了我一個XDocument.Load錯誤(至少,我認爲這就是它發生的地方),某些前綴沒有被定義。有沒有辦法告訴框架忽略任何命名空間前綴?我使用LINQ to XML,但如果可用的話可以使用其他的東西。查詢XML而不擔心名稱空間
我不一定會預先定義它們,因爲我將要處理各種文件,這些文件可能有也可能沒有定義前綴,也沒有明確的xmlns聲明。
我有元素上有和沒有前綴的XML,但沒有爲它們中的任何元素定義名稱空間。當我嘗試加載它時,它給了我一個XDocument.Load錯誤(至少,我認爲這就是它發生的地方),某些前綴沒有被定義。有沒有辦法告訴框架忽略任何命名空間前綴?我使用LINQ to XML,但如果可用的話可以使用其他的東西。查詢XML而不擔心名稱空間
我不一定會預先定義它們,因爲我將要處理各種文件,這些文件可能有也可能沒有定義前綴,也沒有明確的xmlns聲明。
不是前綴應該表示名稱空間的縮寫嗎?我相信在處理它之前,需要清理那些沒有與它們關聯的名稱空間的前綴,因爲它不是有效的XML。一個快速的正則表達式來替換</prefix的所有前綴:< /:和<前綴:<應該這樣做。
要做到這一點,先用</
和<.*?:
與<
替換下面的正則表達式匹配 </.*?:
(不改變順序)。
好主意,我可能會改用這條路線。 –
你想做的事,可以使用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");
其中nameSpaceManager
是XmlNamespaceManager
類型設置爲每個前綴忽略的命名空間。 但從你的問題我覺得這不是一個合理的解決方案。
它可能是。謝謝 –
請參閱http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –
處理XML而不用擔心名稱空間等同於「處理XML而不用擔心XML「。 –
是的。我同意,但這是一個基於XML的文檔,我只需要擔心標籤。 –