最近在學習xml.linq 網上也找了一些資料都不大全面,因此在這寫了一點東西和大家分享,由於本人知識有限,如有錯誤請指證 可擴展標記語言,標准通用標記語言的子集,一種用於標記電子文件使其具有結構性的標記語言。它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 它非常適合萬維網傳輸,提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。(百度) 學習xml.linq,首先要了解xml的幾個定義。 1.XDeclaration----- XML 聲明用於聲明 XML 版本、編碼以及 XML 文檔是否獨立,如果想新建一個xml文件需要在xml文件的最前面聲明xml的一些信息 1 XDeclaration m_XDexlaration = new XDeclaration("1.0", "utf-8", "yes"); //初始化 XDeclaration 2 XDocument m_Xdocument = new XDocument(m_XDexlaration, new XElement("person")); //初始化 XDocument 初始化一個文檔時 記得要有一個根節點不然報錯 3 m_Xdocument.Save("person.xml");//文檔保存 結果: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <person /> 2. XElement , XElement 是指包含在尖括號裡面的有開始結束標簽的標記語言,比如<item> person</item> ,item就是一個元素 3.XAttribute 屬性,比如<item color="red"> person</item>中的color就是item的屬性 4.node 節點,節點是一個比較抽象的定義,在xml文檔中 node可以是 元素和其他的一些東西 二.xml.linq一些方法的運用 1.初始化一個xml文檔 XDeclaration xs = new XDeclaration("1.0", "utf-8", "yes"); XDocument xdoc=new XDocument(xs,new XElement ("person",new XAttribute("color","red"),new XAttribute("size","big"),new XElement("name","劉清"),new XElement("age","18"))); xdoc.Save("p.xml"); Console.WriteLine(xdoc); 初始化文檔時注意一下幾點: 1.首先應有 XDeclaration ,就是xml的定義比如版本,編碼方式登 2.初始化xml時要有一個根節點,比如上面的person就是一個根節點。上面定義了根節點的兩個屬性,color,size;在person下面有兩個子節點 name和age <?xml version="1.0" encoding="utf-8" standalone="yes"?> <person color="red" size="big"> <name>劉清</name> <age>18</age> </person> 2.xml文件的遍歷 比如有一個xml文檔時這樣的 <?xml version="1.0" encoding="UTF-8"?> <Menu> <strip menu="文件"> <item name="文件" 快捷鍵="alt+o"> 打開工作空間 </item> <item name="文件" 快捷鍵="alt+p"> 關閉工作空間 </item> <item name="文件" 快捷鍵="alt+q"> 保存工作空間 </item> <item name="文件" 快捷鍵="alt+m"> 退出工作空間 </item> <item name="文件" 快捷鍵="alt+n" > 打印 </item> </strip> <strip menu="編輯"> <item name="編輯"> 復制 </item> <item name="編輯"> 剪切 </item> <item name="編輯"> 粘貼 </item> <item name="編輯"> 菜單管理器 </item> </strip> </Menu> 現在我要遍歷它所有的項,並根據讀取元素strip 的menu屬性 復制代碼 1 ArrayList name=new ArrayList(); 2 ArrayList s_name; 3 XDocument m_Xdocument = XDocument.Load("MenuXml.XML");//使用xdocument類的靜態方法讀取文檔 4 XElement m_Xlement = m_Xdocument.Element("Menu"); //讀取根元素 5 IEnumerable<XElement> sdf = m_Xlement.Elements("strip");//讀取strip元素下的節點(有兩個strip節點元素和若干item元素) 6 int i = 0; 7 foreach (XElement sld in sdf) 8 { 9 name.Add( sld.Attribute("menu").Value);//得到strip的屬性menu 10 Console.WriteLine(name[i++]); 11 } 12 IEnumerable<XElement> i_XElment = m_Xlement.Elements();//獲得根元素(Menu)下面的所有節點元素 13 foreach (XElement x in i_XElment) 14 { 15 IEnumerable<XElement> p_xelment = x.Elements("item"); 16 s_name = new ArrayList(); 17 foreach (XElement e in p_xelment) 18 { 19 20 Console.Write(e.Value.ToString()); 21 } 22 23 24 } 復制代碼 文件 編輯 打開工作空間 關閉工作空間 保存工作空間 退出工作空間 打印 復制 剪切 粘貼 菜單管理器 請按任意鍵繼續. . . 3.刪除特定的節點 假定有個xml文檔為MenuXml 其內容為 復制代碼 <?xml version="1.0" encoding="utf-8"?> <Menu> <strip menu="文件"> <item name="文件" 快捷鍵="alt+p"> 關閉工作空間 </item> <item name="文件" 快捷鍵="alt+q"> 保存工作空間 </item> <item name="文件" 快捷鍵="alt+m"> 退出工作空間 </item> <item name="文件" 快捷鍵="alt+n"> 打印 </item> </strip> </Menu> 復制代碼 現在我要刪除其中一個元素名為“關閉工作空間” 代碼如下 復制代碼 1 XDocument m_Xdocument = XDocument.Load("MenuXml.XML");//使用xdocument類的靜態方法讀取文檔 2 XElement m_Xlement = m_Xdocument.Element("Menu"); //讀取根元素 3 4 IEnumerable<XElement> xe = m_Xlement.Elements();//得到根元素下的集合 5 foreach (XElement x in xe) 6 { 7 IEnumerable<XElement> xes = x.Elements("item");//得到item的集合 8 foreach (XElement ds in xes) 9 { 10 if (ds.Value.ToString().Trim() == "關閉工作空間")//對比 11 { 12 ds.Remove(); 13 m_Xdocument.Save("MenuXml1.XML");//保存為新的xml 14 } 15 } 16 } 17 XDocument a1 = XDocument.Load("MenuXml.XML"); 18 XDocument a2 = XDocument.Load("MenuXml1.XML"); 19 Console.WriteLine(a1); 20 Console.WriteLine(a2); 復制代碼 結果如下 <Menu> <strip menu="文件"> <item name="文件" 快捷鍵="alt+p"> 關閉工作空間 </item> <item name="文件" 快捷鍵="alt+q"> 保存工作空間 </item> <item name="文件" 快捷鍵="alt+m"> 退出工作空間 </item> <item name="文件" 快捷鍵="alt+n"> 打印 </item> </strip> </Menu> <Menu> <strip menu="文件"> <item name="文件" 快捷鍵="alt+q"> 保存工作空間 </item> <item name="文件" 快捷鍵="alt+m"> 退出工作空間 </item> <item name="文件" 快捷鍵="alt+n"> 打印 </item> </strip> </Menu> 請按任意鍵繼續. . . 在學習linq xml時要注意的是,通過方法.Element()得到的只是只是第一組標簽(如果該標簽存在多對時)