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

C# 建立與讀取 XML 文件 (六) - 完整讀取程式碼與總結

     編輯:關於C語言

系列最終篇:提供使用 `XmlNodeReader` 讀取 XML 並繫結至 `ListView` 的完整 WinForms 程式碼,並總結 C# 與 XML 整合要點。

核心讀取邏輯


while (reader.Read())
{
    switch (reader.NodeType)
    {
        case XmlNodeType.Element:
            currentElement = reader.Name;
            break;
        case XmlNodeType.Text:
            if (currentElement == "Name")
                item = listView.Items.Add(reader.Value);
            else
                item.SubItems.Add(reader.Value);
            break;
    }
}

`XmlNodeType.Element` 記錄當前元素名稱,`XmlNodeType.Text` 取得文字內容並依元素名決定加入主項或子項。

完整 WinForms 程式碼 (Read.cs)


using System;
using System.Drawing;
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 Point(240, 296), Size = new Size(112, 37) };
        btnRead.Click += BtnRead_Click;

        lvData = new ListView
        {
            Location = new Point(10, 9), Size = new Size(623, 269),
            View = View.Details, GridLines = true, FullRowSelect = true
        };
        lvData.Columns.AddRange(new[]
        {
            new ColumnHeader { Text = "Name", Width = 80 },
            new ColumnHeader { Text = "Zip", Width = 80 },
            new ColumnHeader { Text = "Address", Width = 80 },
            new ColumnHeader { Text = "City", Width = 80 },
            new ColumnHeader { Text = "State", Width = 80 }
        });

        ClientSize = new Size(648, 348);
        Controls.AddRange(new Control[] { lvData, btnRead });
        Text = "C# 讀取 XML 示範";
    }

    private void BtnRead_Click(object sender, EventArgs e)
    {
        lvData.Items.Clear();
        string currentElement = "";
        ListViewItem item = null;

        try
        {
            var doc = new XmlDocument();
            doc.Load(@"C:\data.xml");
            using (var reader = new XmlNodeReader(doc))
            {
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element:
                            currentElement = reader.Name;
                            break;
                        case XmlNodeType.Text:
                            if (currentElement == "Name")
                                item = lvData.Items.Add(reader.Value);
                            else
                                item?.SubItems.Add(reader.Value);
                            break;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"讀取失敗: {ex.Message}");
        }
    }

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

XML 資料結構範例 (data.xml)



  
    Ma Jin Hu
    239000
    
Feng Huang Street
Chu Zhou City ANHUI
Wang Tian 239000
Lang Ya Street
He Fei City ANHUI
Zou Wen Biao 100000
Sai Di Street
Bei Jin City Bei Jin

系列總結:C# 與 XML 整合關鍵點

  1. 命名空間:`System.Xml` (DOM)、`System.Xml.Linq` (LINQ to XML)、`System.Xml.Schema` (驗證)、`System.Xml.Serialization` (序列化)。
  2. 模型選擇:
    • DOM (`XmlDocument`/`XDocument`):小檔案、需隨機存取/修改。
    • 流式 (`XmlReader`/`XmlWriter`):大檔案、單向讀寫、恆定記憶體。
    • 序列化 (`XmlSerializer`/`DataContractSerializer`):物件圖↔XML 自動映射。
  3. 效能關鍵:避免重複 `Load`/`Save`;大量寫入用 `XmlWriter`;XPath 查詢複雜時考慮索引或改用資料庫。
  4. 安全:`XmlReaderSettings.DtdProcessing = DtdProcessing.Prohibit` 防 XXE;驗證輸入 XML 結構 (XSD)。
  5. 編碼:統一 UTF-8 (無 BOM) 跨平台最穩;`XmlWriterSettings.Encoding = new UTF8Encoding(false)`。

掌握這三種模型並根據資料量、存取模式選型,即能高效處理 .NET 中的 XML 需求。

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