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

C# Web XML 程式設計完整指南:顯示、新增、刪除 XML 資料

     編輯:關於C語言

前言

XML 具跨平台、易共享特性,常用於企業報表、新聞發布、小型資料儲存。.NET 提供豐富類別操作 XML:XmlReader/Writer(串流)、XmlDocument/XmlNode/XmlElement(DOM)、XPathNavigator(XPath)、XslTransform(XSLT)。本文以 ASP.NET WebForms 示範 DOM 方式完整 CRUD 流程。

資料結構範例 (guests.xml)

<?xml version="1.0" encoding="utf-8"?>
<Guests>
  <Guest>
    <Name>王小明</Name>
    <Country>Taiwan</Country>
    <Email>wang@example.com</Email>
    <Message>歡迎光臨</Message>
  </Guest>
</Guests>

一、顯示 XML 至 DataGrid

// 頁面載入
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) BindGrid();
}

private void BindGrid()
{
    string path = Server.MapPath("~/App_Data/guests.xml");
    var doc = new XmlDataDocument();
    using (var sr = new StreamReader(path, Encoding.UTF8))
        doc.DataSet.ReadXml(sr); // DataSet 直接讀 XML

    DataGrid1.DataSource = doc.DataSet.Tables[0].DefaultView;
    DataGrid1.DataBind();
}

// DataGrid 選取事件 → 存入 Session 導向管理頁
protected void OnSelectName(object sender, EventArgs e)
{
    string name = DataGrid1.SelectedItem.Cells[1].Text;
    Session["SelectedName"] = name;
    Response.Redirect("XmlManage.aspx");
}

二、新增記錄 (XmlManage.aspx)

protected void btnSave_Click(object sender, EventArgs e)
{
    string path = Server.MapPath("~/App_Data/guests.xml");
    var doc = new XmlDocument();
    doc.Load(path);

    // 使用 XPathNavigator 插入節點
    var nav = doc.CreateNavigator();
    nav.MoveToRoot(); // 移至 <Guests>
    nav.MoveToFirstChild(); // 移至第一個 <Guest>(或為空則在根下新增)

    // 在根元素下插入新 <Guest> 作為第一個子節點
    nav.InsertElementAfter("", "Guest", "", ""); // 需自行定位位置
    // 簡化:直接用 DOM API
    XmlElement guest = doc.CreateElement("Guest");
    guest.AppendChild(CreateElement(doc, "Name", txtName.Text));
    guest.AppendChild(CreateElement(doc, "Country", txtCountry.Text));
    guest.AppendChild(CreateElement(doc, "Email", txtEmail.Text));
    guest.AppendChild(CreateElement(doc, "Message", txtMessage.Text));
    doc.DocumentElement.PrependChild(guest); // 插在最前

    doc.Save(path);
    Response.Redirect("Default.aspx");
}

private XmlElement CreateElement(XmlDocument doc, string name, string value)
{
    var el = doc.CreateElement(name);
    el.InnerText = value;
    return el;
}

三、刪除記錄

protected void btnDelete_Click(object sender, EventArgs e)
{
    string path = Server.MapPath("~/App_Data/guests.xml");
    string name = Session["SelectedName"]?.ToString();
    if (string.IsNullOrEmpty(name)) return;

    var doc = new XmlDocument();
    doc.Load(path);

    // XPath 定位:/Guests/Guest[Name='王小明']
    string xpath = $"/Guests/Guest[Name='{name}']";
    XmlNode node = doc.SelectSingleNode(xpath);
    node?.ParentNode?.RemoveChild(node);

    doc.Save(path);
    Response.Redirect("Default.aspx");
}

四、效能與架構建議

場景建議技術理由
資料量小(< 1MB)、讀多寫少XML 檔案 + DOM (XmlDocument)開發簡單、無需資料庫、易部署
資料量中、頻繁查詢/更新SQL Server + FOR XML / OPENXML索引、交易、並行控制、效能佳
跨系統整合、異構資料XML + XSLT / XPath標準化交換格式、轉換彈性
.NET Core / 5+ 現代專案System.Xml.Linq (XDocument)LINQ to XML 語法優雅、功能強大

現代寫法:LINQ to XML (XDocument)

// 新增
var doc = XDocument.Load(path);
doc.Root.AddFirst(
    new XElement("Guest",
        new XElement("Name", txtName.Text),
        new XElement("Country", txtCountry.Text),
        new XElement("Email", txtEmail.Text),
        new XElement("Message", txtMessage.Text)
    ));
doc.Save(path);

// 刪除
doc.Root.Elements("Guest")
   .Where(g => g.Element("Name").Value == name)
   .Remove();
doc.Save(path);

總結

XML 適合「資料量小、結構簡單、需跨平台共享」的情境。ASP.NET 內建 XmlDataDocument 與 DataSet 整合 DataGrid 極為方便;現代專案請優先使用 XDocument (LINQ to XML) 享受強型別與查詢表達能力。

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