建立 XML 檔案示範
using System.Xml;
XmlDocument document = new XmlDocument();
// 建立 XML 宣告
XmlDeclaration xmlDeclaration = document.CreateXmlDeclaration("1.0", "UTF-8", null);
document.InsertBefore(xmlDeclaration, document.DocumentElement);
// 根節點
XmlElement rootNode = document.CreateElement("Root");
document.AppendChild(rootNode); // 加入節點
XmlElement childNode1 = document.CreateElement("Child1");
childNode1.SetAttribute("attr1", "attr-1"); // 設定屬性
rootNode.AppendChild(childNode1);
XmlElement childNode1_1 = document.CreateElement("Child1-1");
childNode1_1.InnerText = "child 1-1"; // 設定內容
childNode1.AppendChild(childNode1_1);
XmlElement childNode2 = document.CreateElement("Child2");
childNode2.InnerText = "child-2";
rootNode.AppendChild(childNode2);
XmlElement childNode3 = document.CreateElement("Child3");
rootNode.AppendChild(childNode3);
// 儲存至檔案
document.Save("my.xml");
輸出結果:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Child1 attr1="attr-1">
<Child1-1>child 1-1</Child1-1>
</Child1>
<Child2>child-2</Child2>
<Child3 />
</Root>
可以看到上方 Child3 因為沒有內容,是空元素,所以自動省略結束標籤,使用封閉斜線關閉標籤(下方第一行)。
<Child3 /> <!-- 使用封閉斜線,沒有結束標籤 -->
<Child3></Child3> <!-- 有起始標籤和結束標籤 -->
如果希望以上方第二行的方式顯示,可以透過將 IsEmpty 設定為 false 的方式解決:
childNode3.IsEmpty = false;
讀取 XML 檔案示範
using var reader = XmlReader.Create("my.xml"); // 目標檔案
XmlDocument document = new XmlDocument();
document.Load(reader);
reader.Close();
// 取得 Root 下的所有節點
XmlNodeList? rootNodes = document.SelectNodes("/Root/*");
Console.WriteLine($"Root 下的節點數量: {rootNodes?.Count}"); // Root 下的節點數量: 3
foreach (var node in rootNodes)
{
Console.WriteLine($"node: {((XmlNode)node).Name}");
/*
node: Child1
node: Child2
node: Child3
*/
}
// 讀取指定節點
XmlNode? child1_1 = document.SelectSingleNode("/Root/Child1/Child1-1");
Console.WriteLine($"text: {child1_1?.InnerText}"); // text: child 1-1
// 讀取指定節點的屬性
XmlNode? child1 = document.SelectSingleNode("/Root/Child1");
Console.WriteLine($"attr1: {child1?.Attributes?["attr1"]?.Value}"); // attr1: attr-1
// 讀取指定節點的所有屬性
XmlAttributeCollection? child1Attrs = child1?.Attributes;
foreach (XmlAttribute? attr in child1Attrs!)
{
Console.WriteLine($"attr: {attr?.Name}"); // attr: attr1
}
參考資料:
Wiki - XML
Microsoft.Learn - XmlDocument Class
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com