簡體   English   中英

如何在c#中忽略XML文檔中的命名空間?

[英]How can I ignore the namespace in an XML document in c#?

我正在嘗試在c#中打開一個XML文件,按屬性名稱查找節點,該節點工作正常,然后在同一節點中顯示XML屬性的名稱。

我的代碼很簡單(因為我從其他來源捏了它!)並且在我的測試XML文檔上工作。 但是,當我嘗試使用實際文件時,它不起作用。 我一直在拉我的頭發(不是我剩下的很多)並且發現它是因為我正在使用的實際文件中的xmlns屬性。 命名空間的路徑不存在。

我的代碼如下:

XmlDocument doc = new XmlDocument();
doc.Load(@"c:\deroschedule\test.sym");
var orient = doc.SelectSingleNode("//Attr[@name='Orientation]/@value");

當xmlns未包含在文件中時,上述代碼可以正常工作。 但是,當包含xmlns時,orient變量為null。 xmlns路徑不存在,當我嘗試在瀏覽器中導航到它時,我收到404錯誤。

不確定xml命名空間是誠實的,但我有數千個這樣的文件,無法手動編輯它們。 是否有一種簡單的方法可以讓C#忽略命名空間並假裝它不在那里? 我試過Xpath,但這讓我大吃一驚!

好吧,我自己想出來了。 我想我會在這里發布答案,盡管顯然有成千上萬的其他答案。

我出錯的地方誤解了名稱空間實際上做了什么。 無論如何,我必須使用xmlnamespacenmanager來聲明與xml文件中相同的命名空間。 然后我不得不在查詢中使用命名空間。

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\deroschedule\test6.sym");
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("ma", "http://www.yournamespaceinfohere.com/");
var orient = doc.SelectSingleNode("//ma:attr[@name='Orientation']/@value", ns);

現在我的下一個挑戰是嘗試從xml文件中讀取bmp,應該很簡單,對吧?!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM