前两章介绍了关于Linq创建、解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如下,当遇到这样
<?xml version="1.0" encoding="utf-8"?> <x0:Envelop xmlns:x0="http://www.w3school.com.cn/Envelope"> <x1:Header xmlns:x1="http://www.w3school.com.cn/Header"> <x1:Header> <x1:Type>ICC</x1:Type> <x1:Version>01</x1:Version> </x1:Header> </x1:Header> <x1:Body xmlns:x1="http://www.w3school.com.cn/Body"> <x2:IBBC xmlns:x2="http://www.w3school.com.cn/IBBC/01"> <x2:SecondInform>123</x2:SecondInform> <x2:Status> <StatusCode>2222</StatusCode> </x2:Status> <x2:Test> <x2:Att price="100">12100</x2:Att> <x2:Att price="200">12200</x2:Att> </x2:Test> </x2:IBBC> </x1:Body> </x0:Envelop>
对于删除操作:
第一,根据Linq查询语法获取StatusCode节点对象
第二,调用Remove方法删除对象节点
第三,保存文档
XElement root = XElement.Load("d:\test.xml"); XNamespace x2 = @"http://www.w3school.com.cn/IBBC/01";//刪除 var statuscode = from c in root.Descendants(x2 + "StatusCode") select c; statuscode.Remove(); root.Save(@"d: est.xml");
对于修改操作:
这里有个地方要注意下
第一: SetValue方法,获取对象,添加修改值
//修改
var setcode = from d in root.Descendants(x2 + "StatusCode") select d; setcode.SingleOrDefault().SetValue("1111"); root.Save(@"d: est.xml");
第二:SetElementValue方法,可以理解为覆盖,如果当前文档存在StatusCode元素,则进行修改,如果不存在,其功能相当于Add,将其元素添加到文档中
//修改 var setcode = from d in root.Descendants(x2 + "Status") select d;
setcode.SingleOrDefault().SetElementValue("StatusCode","2222"); root.Save(@"d: est.xml");
对于添加操作:
其实关于添加操作,在创建XML的时候就涉及到,现在做一些补充说明
①.在指定节点(Status)下插入指定节点(Test)(ps:StatusCode同级元素)
//添加 var tarStatus = from x in root.Descendants("StatusCode") select x; XElement test = new XElement(x2+"Test","我是一個測試值"); tarStatus.FirstOrDefault().AddAfterSelf(test); root.Save(@"d: est.xml");
可能有些复杂,或者说有些繁琐
对于查询操作:
1. Element():LINQ to XML 查询方法XDocument类的成员,也可用于XEelment类。该方法返回的XML文档或片段中的第一级元素
//查詢 var quests = from c in root.Elements() select c; foreach (var item in quests) { Console.WriteLine(item); } root.Save(@"d: est.xml");
如图,当选择 select c 的返回Header和Body两个节点所有元素;当选择 Select c.Name时,返回节点名Header和Body
2.Descendants(): LINQ to XML 查询方法XDocument类的成员,也可用于XEelment类。该方法返回的XML文档或片段中的子元素
//查詢 var quests = from c in root.Descendants(x1 + "Type") select c.Value ; foreach (var item in quests) { Console.WriteLine(item); } root.Save(@"d: est.xml");
3.Attribute():LINQ to XML 查询方法Attribute()成员,返回当前元素的所有特性
//查詢 得到12200 var quests = from c in root.Descendants(x2 + "Att") where c.Attribute("price").Value=="200" select c.Value; foreach (var item in quests) { Console.WriteLine(item); } root.Save(@"d: est.xml");