之前做的项目中有很多对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文件为:
<?xml version="1.0" encoding="utf-8" ?>
<Task ID="1">
<TaskName>Task1</TaskName>
<Class ID="1">Class1</Class>
<Class ID="2">Class2</Class>
<Frequency>每月</Frequency>
<DataPath ID="1">DataPath1</DataPath>
<DataPath ID="2">DataPath2</DataPath>
<DataPath ID="3">DataPath3</DataPath>
</Task>
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文件为:
<?xml version="1.0" encoding="utf-8" ?>
<Task ID="2">
<TaskName>TaskUpDate</TaskName>
...
</Task>
5.删除节点
查到到对应节点使用Remove()方法删除。
xml.Descendants("Class").FirstOrDefault()?.Remove(); //删除第一个Class元素
网友评论