XElement XML操作

之前做的项目中有很多对xml文件操作,对XElement基本操作总结一下。

1.创建并添加节点

如果要创建非默认编码方式的xml文件,可以直接在创建时声明:XDocument xml = new XDocument(new XDeclaration("1.0", "utf-8", null));
或后续添加:xml.Add(new XDeclaration("1.0", "utf-8", null));

XDocument xml = new XDocument();  
xml.Add(new XDeclaration("1.0", "utf-8", null)); //声明编码方式
var Task = new XElement("Task", new XAttribute("ID", 1),
                        new XElement("TaskName", "Task1"),
                        new XElement("Class", "Class1", new XAttribute("ID", 1)),
                        new XElement("Class", "Class2", new XAttribute("ID", 2)));  //新建节点
Task.Add(new XElement("Frequency", "每月"));  //添加子节点
XElement dp = new XElement("DataPath", "DataPath2");
dp.Add(new XAttribute("ID", 2)); //添加属性
Task.Add(dp);
dp.AddBeforeSelf(new XElement("DataPath", "DataPath1",new XAttribute("ID", 1))); //在当前节点之前插入节点
dp.AddAfterSelf(new XElement("DataPath", "DataPath3", new XAttribute("ID", 3))); //在当前节点之后插入节点
 xml.Add(Task);
xml.Save($@"C:\Config\Tasks\Task1.xml");  //保存文件到指定路径

生成的xml文件为:



  Task1
  Class1
  Class2
  每月
   DataPath1
  DataPath2
  DataPath3

2.读取xml文件

XDocument xml= XDocument.Load($@"C:\Config\Tasks\Task1.xml");

3.遍历及查找节点

查找节点经常用到的方法有Descendants()和Elements()。两者的区别是:Descendants()方法会一直向下遍历查找直到没有子节点,Elements()只会查找当前节点的子节点,不会向下遍历。

var xes1 = xml.Descendants(); //查找所有节点
xes1.ForEach(xe =>
{
    ...//遍历到的节点操作
});
 var xes2 = xml.Elements(); //查找当前节点所有子节点
var xes3= xml.Descendants("Class"); //查找所有Class节点
var xes4 = xml.Elements("Class");//查找当前节点所有Class子节点
var xes5= xml.Elements().Elements("Class"); //查找当前节点所有子节点下Class子节点
var xe1=xml.Element("Task").Element("Class"); //查找Task节点下第一个Class子节点
var xe2 = xml.Descendants("Class").Where(xe => xe.Attribute("ID").Value == "1"); //查找ID=1的Class节点
var xe3 = xml.Elements().Elements("Class").Where(xe=>xe.Attribute("ID").Value=="1");

![FNPDSJMB]T]0)(_CH`}1.png

4.修改节点

修改后记得要保存,不然等于没改(手动摊手)。

xml.Element("Task").Element("TaskName").Value="TaskUpDate"; //修改节点值
xml.Element("Task").SetAttributeValue("ID",2 );
xml.Save($@"C:\Config\Tasks\Task1.xml");  

修改后的xml文件为:



  TaskUpDate
  ...

5.删除节点

查到到对应节点使用Remove()方法删除。

xml.Descendants("Class").FirstOrDefault()?.Remove(); //删除第一个Class元素

你可能感兴趣的:(XElement XML操作)