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

C# 建立與讀取 XML 文件完整教學 (XmlDocument / XmlNodeReader)

     編輯:關於C#

XML 是資料交換、設定檔、文件儲存的通用格式。.NET 提供 System.Xml 命名空間下豐富的類別操作 XML。本文示範兩種建立 XML 的方式 (DOM 逐節點建構 vs LoadXml 字串載入) 以及使用 XmlNodeReader 讀取並繫結到 ListView 的完整範例。

一、建立 XML 文件

方法一:DOM 逐節點建構 (彈性高、適合動態資料)


using System.Xml;

public void CreateXmlDom(string filePath)
{
    var doc = new XmlDocument();

    // 1. XML 宣告
    var decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
    doc.AppendChild(decl);

    // 2. 根元素
    var root = doc.CreateElement("ROOT");
    root.AppendChild(doc.CreateTextNode("Root Text"));
    doc.AppendChild(root);

    // 3. 子元素
    var elem = doc.CreateElement("SampleElement");
    elem.AppendChild(doc.CreateTextNode("The text of the sample element"));
    root.AppendChild(elem); // 掛在根元素下

    // 4. 存檔
    doc.Save(filePath);
}

方法二:LoadXml 字串載入 (快速、適合靜態結構)


public void CreateXmlLoadXml(string filePath)
{
    var doc = new XmlDocument();
    string xml = @"

    The text of the sample element
";
    doc.LoadXml(xml);
    doc.Save(filePath);
}

二、讀取 XML 並繫結 ListView

範例 XML 結構 (data.xml):



  
    Ma Jin Hu
    239000
    
Feng Huang Street
Chu Zhou City ANHUI
Wang Tian 239000
Lang Ya Street
He Fei City ANHUI

WinForms 完整讀取程式碼


using System;
using System.Windows.Forms;
using System.Xml;

public class Form1 : Form
{
    private Button btnRead;
    private ListView lvData;

    public Form1()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        btnRead = new Button { Text = "讀取 XML", Location = new System.Drawing.Point(240, 296), Size = new System.Drawing.Size(112, 37) };
        btnRead.Click += BtnRead_Click;

        lvData = new ListView
        {
            Location = new System.Drawing.Point(10, 9),
            Size = new System.Drawing.Size(623, 269),
            View = View.Details,
            GridLines = true,
            FullRowSelect = true
        };
        lvData.Columns.Add("Name", 120);
        lvData.Columns.Add("Zip", 80);
        lvData.Columns.Add("Address", 150);
        lvData.Columns.Add("City", 120);
        lvData.Columns.Add("State", 80);

        this.Controls.Add(lvData);
        this.Controls.Add(btnRead);
        this.ClientSize = new System.Drawing.Size(650, 350);
        this.Text = "C# 讀取 XML 範例";
    }

    private void BtnRead_Click(object sender, EventArgs e)
    {
        lvData.Items.Clear();

        try
        {
            var doc = new XmlDocument();
            doc.Load(@"C:\data.xml"); // 或 Application.StartupPath

            using (var reader = new XmlNodeReader(doc))
            {
                string currentElement = "";
                ListViewItem item = null;

                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element:
                            currentElement = reader.Name;
                            if (currentElement == "Person")
                                item = new ListViewItem(); // 新建一列
                            break;

                        case XmlNodeType.Text:
                            if (item == null) break;
                            string value = reader.Value;
                            switch (currentElement)
                            {
                                case "Name": item.Text = value; break; // 第一欄用 Text
                                case "Zip": item.SubItems.Add(value); break;
                                case "Address": item.SubItems.Add(value); break;
                                case "City": item.SubItems.Add(value); break;
                                case "State": 
                                    item.SubItems.Add(value);
                                    lvData.Items.Add(item); // 讀完 State 表示一筆 Person 結束
                                    item = null;
                                    break;
                            }
                            break;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"讀取失敗: {ex.Message}", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    [STAThread]
    static void Main() { Application.Run(new Form1()); }
}

現代替代方案建議

  • LINQ to XML (System.Xml.Linq):XDocument/XElement API 更直觀、支援 LINQ 查詢、建構語法更簡潔 (建議新專案優先使用)。
  • XmlReader / XmlWriter:串流式讀寫,記憶體效率極高,適合超大型 XML (GB 級)。
  • 序列化 (XmlSerializer, DataContractSerializer):物件 <-> XML 自動轉換,適合設定檔、DTO 傳輸。

LINQ to XML 讀取同樣資料範例


var doc = XDocument.Load(@"C:\data.xml");
var persons = doc.Descendants("Person").Select(p => new
{
    Name = (string)p.Element("Name"),
    Zip = (string)p.Element("Zip"),
    Address = (string)p.Element("Address"),
    City = (string)p.Element("City"),
    State = (string)p.Element("State")
}).ToList();
// 直接繫結到 ListView 或 GridView
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved