![](/img/trans.png)
[英]How to read an XML document in C# with a namespace that has no associated prefix
[英]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.