範例 XML (people.xml)
Tom StaffordCFO
Jane GoodwillCEO
Tim DalyCTOCTO0
John GraverCSO
技巧一:XPath 查詢單一節點
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("people.xml"));
string title2 = doc.SelectSingleNode("//person[name='Tim Daly']/title2").InnerText; // "CTO0"
//:任意深度後代。
SelectSingleNode 回單一節點,SelectNodes 回節點集合。
技巧二:XmlNodeList 繫結 ListBox
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("people.xml"));
XmlNodeList names = doc.GetElementsByTagName("name");
ArrayList list = new ArrayList();
foreach (XmlNode n in names) list.Add(n.InnerXml);
ListBox1.DataSource = list; ListBox1.DataBind();
技巧三:DataSet ReadXml 繫結 Repeater
DataSet ds = new DataSet();
using (FileStream fs = new FileStream(Server.MapPath("people.xml"), FileMode.Open, FileAccess.Read))
ds.ReadXml(fs);
Repeater1.DataSource = ds.Tables[0].DefaultView;
Repeater1.DataBind();
ASPX 範本:
姓名: <%# DataBinder.Eval(Container.DataItem, "name") %>
職稱: <%# DataBinder.Eval(Container.DataItem, "title") %>
技巧四:Repeater 編輯後寫回 XML
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("people.xml"));
// 新增一筆
DataRow nr = ds.Tables[0].NewRow();
nr["name"] = "New User"; nr["title"] = "Dev"; nr["title2"] = "Dev2";
ds.Tables[0].Rows.Add(nr);
// 寫回
using (FileStream fs = new FileStream(Server.MapPath("people.xml"), FileMode.Create, FileAccess.Write))
ds.WriteXml(fs, XmlWriteMode.WriteSchema);
技巧五:直接載入遠端 URL XML
XmlDocument doc = new XmlDocument();
doc.Load("https://www.csdn.net/expert/topic/1094/1094085.xml?temp=.9642145");
doc.Save(Console.Out); // 輸出至主控台
XmlDocument.Load 直接支援 HTTP/HTTPS URL。
- 適用於即時資料饋給(股票、新聞 RSS 等)。
類別選擇指引
| 類別 | 適用場景 | 特性 |
| XmlDocument | 小型文件、需 DOM 修改、XPath 查詢 | 記憶體載入整樹、支援讀寫 |
| XmlReader/XmlWriter | 大型文件、單向串流、高效能 | 前向唯讀/寫入、低記憶體 |
| XPathDocument | 唯讀 XPath 查詢 | 優化 XPath、不可修改 |
| DataSet | 關聯式視圖、資料繫結、離線編輯 | 表格模型、支援 WriteXml/ReadXml |
| XDocument (LINQ to XML) | 現代專案、LINQ 查詢、函式式建構 | .NET 3.5+、語法簡潔 |