[C#.NET][XML] XML檔案基本操作-XmlDocument

  • 209775
  • 0
  • XML
  • 2013-08-16

[C#.NET][XML] XML檔案基本操作-XmlDocument

看完本篇將學會對XML文件的新增、刪除、修改、插入

 

XmlDocument 用來存放XML文件的類別

XmlElement 存取節點屬性的類別

XmlNode 選取節點的類別

image

這三個類別就能處理XML文件檔案的新增、刪除、插入、修改,讓我們處理XML檔案一點都不難,

每一個<>內的文字就是代表著節點

新增

使用XmlDocument.CreateElement 方法建立節點


XmlDocument doc = new XmlDocument();
//建立根節點
XmlElement company = doc.CreateElement("Company");
doc.AppendChild(company);
//建立子節點
XmlElement department = doc.CreateElement("Department");
department.SetAttribute("部門名稱", "技術部");//設定屬性
department.SetAttribute("部門負責人", "余小章");//設定屬性
//加入至company節點底下
company.AppendChild(department); 

XmlElement members = doc.CreateElement("Members");//建立節點
//加入至department節點底下
department.AppendChild(members); 

XmlElement info = doc.CreateElement("Information");
info.SetAttribute("名字", "余小章");
info.SetAttribute("電話", "0806449");
//加入至members節點底下
members.AppendChild(info);
info = doc.CreateElement("Information");
info.SetAttribute("名字", "王大明");
info.SetAttribute("電話", "080644978");
//加入至members節點底下
members.AppendChild(info);
doc.Save("Test.xml");

image

這是由程式建立出來的XML檔案

插入

插入節點跟新增節點的用法是一樣的,首先必需要決定要插入哪一個節點,決定好之後就可以開始插了


//插入節點
XmlDocument doc = new XmlDocument();
doc.Load("Test.xml");
XmlNode node = doc.SelectSingleNode("Company/Department");//選擇節點
if (node == null)
    return;
XmlElement main = doc.CreateElement("newPerson"); //添加person節點
main.SetAttribute("name", "小明");
main.SetAttribute("sex", "女");
main.SetAttribute("age", "25");
node.AppendChild(main);
XmlElement sub1 = doc.CreateElement("phone");
sub1.InnerText = "123456778";
main.AppendChild(sub1);
XmlElement sub2 = doc.CreateElement("address");
sub2.InnerText = "高雄";
main.AppendChild(sub2);
doc.Save("Test.xml");

 

image

上圖是插入節點後的結果

修改

找出要修改的屬性名稱(Name),然後修改內容(Value)

取得屬性基本上是用GetAttribute 系列方法

image

設定屬性基本上是用SetAttribute 系列方法

image

 


//取得根節點內的子節點
XmlDocument doc = new XmlDocument();
doc.Load("Test.xml");
//選擇節點
XmlNode main = doc.SelectSingleNode("Company/Department");
if (main == null)
    return;
//取得節點內的欄位
XmlElement element = (XmlElement)main;
//取得節點內的"部門名稱"內容
string data = element.GetAttribute("部門名稱");
//取得節點內的"部門名稱"的屬性
XmlAttribute attribute = element.GetAttributeNode("部門名稱");
//列舉節點內的屬性
XmlAttributeCollection attributes = element.Attributes;
string content = "";
foreach (XmlAttribute item in attributes)
{
    content += item.Name + "," + item.Value + Environment.NewLine;
    if (item.Name == "部門名稱")
        item.Value = "胎哥部門";
    if (item.Name == "部門負責人")
        item.Value = "胎哥郎";
}
doc.Save("Test.xml");
Console.WriteLine(content);

 

image

很清楚的看到余小章變成胎哥郎了XD

刪除

選好節點後用Remove系列的方法刪除

image


XmlDocument doc = new XmlDocument();
doc.Load("Test.xml");
//選擇節點
XmlNode main = doc.SelectSingleNode("Company/Department");
if (main == null)
    return;
//取得節點內的欄位
XmlElement element = (XmlElement)main;
//刪除節點內的屬性
element.RemoveAttribute("部門名稱");
//刪除節點內所有的內容
//element.RemoveAll();
doc.Save("Test.xml");

 

 

image

胎哥部門不見了(喜)

 

 

 

範例下載

OperXML.zip

 

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo