XML學習手冊
生成xml;
新建一個CreateXml類
創建一個簡單的xml;
1///<summary>
2///創建簡單的xml並保存
3///</summary>
4publicstaticvoidCreateElement()
5{
6XDocumentxdoc=newXDocument(
7newXDeclaration("1.0","utf-8","yes"),
8newXElement("root",
9newXElement("item","1"),
10newXElement("item","2")
11));
12xdoc.Save(Path);
13}
·當xml有很多項時,我們就需要利用註釋加以區別,通過linq to xml我們一樣可以在其中添加註釋
Advertisements
XDocumentdoc=newXDocument(newXDeclaration("1.0","utf-8","yes"),newXComment("提示"),newXElement("item","asd"));
很多時候我們都會將數組之類的類型轉換成xml以便保存進永久性存儲介質中,所以下面我們也簡單的舉了一個例子,將數組轉換成xml。
XElementxele=newXElement("Root",fromiteminsselectnewXElement("item",item.ToString()));
有時我們不想創建新的子項去保存數據,而是使用屬性的方式去保存。理所應當,linq to xml一樣也支持這個功能,下面我們可以通過簡單的語句去實現它。
Advertisements
XAttributexa=newXAttribute("V2","2");XElementxele=newXElement("Root",newXElement("Item",newXAttribute("V1","1"),xa1));
對於一些企業級的xml格式,會非常的嚴格。特別是在同一個xml中可能會出現重複的項,但是我們又想區分開來,這個時候我們可以利用命名空間將他們分開
XElementxele=newXElement("{http://www.xamarin-cn.com}Root",newXElement("Item","1"),newXElement("{http://www.baidu.com}Item",2));
節點前後插入新的節點
XElementxele=XElement.Load(Path);varitem=(fromeleinxele.Elements("Item")whereele.Value.Equals("Item2")selectele).SingleOrDefault();if(item!=null){XElementnele=newXElement("NItem","NItem");XElementnele2=newXElement("BItem","BItem");item.AddAfterSelf(nele);item.AddBeforeSelf(nele2);xele.Save(Path);}
通過SetAttributeValue去添加新的屬性或者修改現有屬性
XElementxele=XElement.Parse(@"<?xmlversion='1.0'encoding='utf-8'?><Root><!--前面的註釋--><Itemv1='1'v2='2'>Item1</Item><!--後面的註釋--><Itemv1='1'v2='2'v3='3'>Item2</Item></Root>");varitem=(fromeleinxele.Elements("Item")whereele.Value.Equals("Item2")selectele).SingleOrDefault();item.SetAttributeValue("v3","3");
修改節點的值通過SetValue即可做到,但是有時涉及到子節點,而我們想一次性全部替換掉,那麼我們就需要使用ReplaceWith。
刪除指定的屬性Remove;
通過Descendants獲取最底的節點,然後使用Ancestors獲取所有的父級節點,而AncestorsAndSelf則表示包含本身。
通過ElementsBeforeSelf獲取該節點之前的同級節點,當然我們還可以傳入參數作為限制條件。這裡我們通過查詢獲取了SubItem這個節點,並顯示該節點之前的同級節點。
關鍵就是Changing和Changed事件,其次就是在事件中判斷事件的來源;
數據量大時進行流讀取,通過XmlReader的Create靜態方法打開xml文件,並通過Read一個節點的進行讀取,並判斷該節點的類型