生成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我们一样可以在其中添加注释
XDocumentdoc=newXDocument(newXDeclaration("1.0","utf-8","yes"),newXComment("提示"),newXElement("item","asd"));
很多时候我们都会将数组之类的类型转换成xml以便保存进永久性存储介质中,所以下面我们也简单的举了一个例子,将数组转换成xml。
XElementxele=newXElement("Root",fromiteminsselectnewXElement("item",item.ToString()));
有时我们不想创建新的子项去保存数据,而是使用属性的方式去保存。理所应当,linq to xml一样也支持这个功能,下面我们可以通过简单的语句去实现它。
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一个节点的进行读取,并判断该节点的类型