昨天,編程讀取XML的時候,遇上了類似下面的一段XML
<a:root xmlns:a="http://ww.abc.com/"> <a:book>aaaa</a:book> </a:root>
起初沒有特別的留意,於是乎就像平時讀取XML一樣使用了。
var ele = from item in xDoc.Descendants("a:book") select item;
但是,運行報錯,不允許傳入冒號:之類的字符,后來查閱資料發現,節點中,冒號前的a代表是的命名空間,冒號后的才是根節點名稱。在Root節點中,也對命名空間進行了聲明 xmlns:a="http://ww.abc.com/" ,知道了這么一回事后,再來看看如何去讀取,正確的讀取是:
XDocument xDoc = XDocument.Load("a.xml"); XNamespace n = @"http://www.abc.com"; var ele = from item in xDoc.Descendants(n + "book") select item.Value;
從代碼可以看出,我聲明了一個XNamespace類型的變量,並且把XML文件中出現的命名空間 http://ww.abc.com/ 賦值給它,然后再讀取節點的時候,與真正的節點名稱book進行拼接就可以了!
XML中出現命名空間的原因是,當你需要使用多個XML一起工作時,由於兩個文檔都包含帶有不同內容和定義的節點元素,就會發生命名沖突,加上命名空間使用可以避免發生沖突,這與C#編程中類的命名空間的用處差不多。
另外,如果需要了解更多操作XML的可以訪問下面這篇文章,寫得很詳細: