首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# XML DOM 操作完整指南:XmlDocument 載入、查詢、修改與儲存

     編輯:關於C#

前言

DOM (Document Object Model) 將整份 XML 載入記憶體形成樹狀結構,提供隨機存取、修改、導航能力。雖耗記憶體,但對中小型 XML、頻繁修改場景極為方便。本文詳細說明 .NET 中 XmlDocument、XmlNode、XmlNodeList 核心類別與實作範例。

DOM 核心類別繼承結構

  • XmlNode:所有節點抽象基類,提供導航 (ParentNode, ChildNodes, FirstChild, NextSibling)、內容存取 (InnerText, InnerXml, OuterXml)、修改 (AppendChild, RemoveChild, ReplaceChild)。
  • XmlNodeList:節點有序集合,支援 Count, Item(index), GetEnumerator()。
  • XmlDocument:文件根節點,提供 Load(), Save(), CreateElement(), CreateAttribute(), CreateTextNode() 等工廠方法。

XmlNode 常用屬性與方法

成員說明
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)取代子節點

實作範例:DomOperation 類別

DOM 操作示範介面

介面按鈕對應操作:

  • LoadXML:doc.Load("file.xml")
  • LoadXMLReader:doc.Load(xmlTextReader) 先用 XmlTextReader 過濾再載入,兼顧效能與 DOM 便利性。
  • SaveXML:doc.Save("file.xml")
  • SaveXMLWriter:doc.Save(xmlTextWriter)
  • Add Product:CreateElement + AppendChild
  • Replace Product:ReplaceChild
  • Change Order:移除後重新插入調整順序
  • Remove Product Info:RemoveChild

關鍵程式碼片段


// 載入
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");

效能與記憶體考量

  • DOM 將整份文件載入記憶體,大型 XML (超過 10-50MB) 易造成 OOM。
  • 大檔案建議:XmlReader 串流讀取、XStreamingElement (LINQ to XML) 串流寫入、或分割處理。
  • XmlDocument.Load(XmlReader) 可先用 Reader 定位片段再載入該片段為 DOM,折衷方案。

現代替代方案:LINQ to XML


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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved