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檔案為:
<?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元素