DOM (Document Object Model) 將整份 XML 載入記憶體形成樹狀結構,提供隨機存取、修改、導航能力。雖耗記憶體,但對中小型 XML、頻繁修改場景極為方便。本文詳細說明 .NET 中 XmlDocument、XmlNode、XmlNodeList 核心類別與實作範例。
XmlNode:所有節點抽象基類,提供導航 (ParentNode, ChildNodes, FirstChild, NextSibling)、內容存取 (InnerText, InnerXml, OuterXml)、修改 (AppendChild, RemoveChild, ReplaceChild)。XmlNodeList:節點有序集合,支援 Count, Item(index), GetEnumerator()。XmlDocument:文件根節點,提供 Load(), Save(), CreateElement(), CreateAttribute(), CreateTextNode() 等工廠方法。| 成員 | 說明 |
|---|---|
HasChildNodes | 是否有子節點 |
ChildNodes | 所有子節點集合 |
FirstChild / LastChild | 首/尾子節點 |
ParentNode | 父節點 |
NextSibling / PreviousSibling | 同層下一/上一節點 |
InnerText | 串聯所有子孫文字內容 |
InnerXml | 子節點標記 |
OuterXml | 含自身的完整標記 |
SelectNodes(xpath) | XPath 查詢回傳節點清單 |
SelectSingleNode(xpath) | XPath 查詢回傳第一個節點 |
AppendChild(node) | 新增子節點至末尾 |
PrependChild(node) | 新增子節點至開頭 |
RemoveChild(node) | 移除指定子節點 |
ReplaceChild(new, old) | 取代子節點 |

介面按鈕對應操作:
doc.Load("file.xml")doc.Load(xmlTextReader) 先用 XmlTextReader 過濾再載入,兼顧效能與 DOM 便利性。doc.Save("file.xml")doc.Save(xmlTextWriter)CreateElement + AppendChildReplaceChildRemoveChild
// 載入
XmlDocument doc = new XmlDocument();
doc.Load("products.xml");
// XPath 查詢
XmlNodeList products = doc.SelectNodes("/catalog/product");
foreach (XmlNode p in products)
{
string name = p.SelectSingleNode("name").InnerText;
decimal price = decimal.Parse(p.SelectSingleNode("price").InnerText);
}
// 新增節點
XmlElement newProd = doc.CreateElement("product");
XmlElement nameElem = doc.CreateElement("name");
nameElem.InnerText = "New Product";
newProd.AppendChild(nameElem);
// ... 其他子元素
doc.DocumentElement.AppendChild(newProd);
// 儲存
doc.Save("products.xml");
XmlReader 串流讀取、XStreamingElement (LINQ to XML) 串流寫入、或分割處理。XmlDocument.Load(XmlReader) 可先用 Reader 定位片段再載入該片段為 DOM,折衷方案。
XDocument doc = XDocument.Load("file.xml");
var prices = doc.Descendants("product").Select(p => (decimal)p.Element("price"));
doc.Descendants("product").Where(p => (decimal)p.Element("price") > 100).Remove();
doc.Save("file.xml");
System.Xml.Linq API 更符合 C# 語法習慣,支援函數式查詢、建構,推薦新專案優先使用。
掌握 XmlDocument DOM 操作是處理 XML 的基本功。理解節點導航、XPath 查詢、修改與儲存流程,能應對大多數中小型 XML 處理需求。面對大型檔案或高效能要求時,請轉向 XmlReader/XmlWriter 串流模型或 LINQ to XML。