Linq操作XML

2021/8/11

Linq To XML的核心类XElement,一个XElement表示一个节点,new XElement("Order"),创建一个名字为Order的标签,调用Add增加子节点,也是XElement 对象!

下面是几种LINQ操作XML的常见形式。

///写文件(生成节点性质的)

XElement ePersons =new XElement("Persons");
XElement ptom =new XElement("Person");//增加一个Person节点
ptom.Add(new XElement("Name","Tom"));//在ptom下再增加子节点
ptom.Add(new XElement("Age","18"));
ePersons.Add(ptom);
XElement pjack = new XElement("Person");
pjack.Add(new XElement("Name", "Jack"));
pjack.Add(new XElement("Age", "20"));
ePersons.Add(pjack);

最终生成:


<?xml version="1.0" encoding="utf-8" ?> <Persons> <Person> <Name>Tom</Name> <Age>18</Age> </Person> <Person> <Name>Jack</Name> <Age>20</Age> </Person> </Persons>


///写文件(生成属性性质的)

XElement ptom =new XElement("Person");
ptom.Add(new XAttribute("Name","tom"));//添加XAttribute就生成属性
ptom.Add(new XAttribute("Age","18"));
ePersons.Add(ptom);
 
XElement pjack =new XElement("Person");
pjack.Add(new XAttribute("Name","jack"));
pjack.Add(new XAttribute("Age","20"));
ePersons.Add(pjack);

最终生成:

<Persons> <Person Name="tom" Age="18"/> <Person Name="jack" Age="20"/> </Persons>

 //读XML 读取节点格式的值

XDocument xd= XDocument.Load("XML文件地址");
 
      foreach (XElement itemin xd.Root.Descendants("Person"))//得到每一个Person节点,得到这个节点再取他的Name的这个节点的值
          {
             Console.WriteLine(item.Element("Age").Value);//Person的节点的下得节点为Name的
          }
 
注释:doc.root(得到根节点的XElement对象).XElement(“tagname”)方法得到的就是节点下第一个名字为tagname的节点。
如果doc.root。XElements(复数形式)就是得到所有的子节点,Descendants("“tagname”")子孙节点

 

  //读XML 读取属性格式的值


XDocument xd= XDocument.Load(@"D:\Program Files\Demo\Demo\ConsoleApplication2\XMLFile2.xml");
          foreach (XElement itemin xd.Root.Descendants("Person"))//得到每一个Person节点,得到这个节点再取他的Name的这个节点的值
          {
              Console.WriteLine(item.Attribute("Age").Value);//Person的节点的下得节点为Name的
          }

  //直接解析xml字符串

XDocument doc = XDocument.Parse(xml);