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

ASP.NET 使用 XML 作為中介資料交換格式:DataSet 轉 XML 完整實作

     編輯:關於ASP.NET

應用場景

異構系統整合、離線資料匯出、Web Service 回傳、設定檔儲存等情境,XML 作為平台無關的中介格式極為適合。ASP.NET 內建 `XmlTextWriter`/`XmlDocument`/`XDocument` 提供高效能 XML 生成與解析。

核心程式碼:DataSet 寫入 XML 檔案

private void Page_Load(object sender, EventArgs e)
{
 // 1. 連線資料庫取得 DataSet
 string tableName = "systypes";
 string connStr = "server=localhost;uid=sa;pwd=123;database=TestDB";
 string sql = "SELECT * FROM " + tableName;

 DataSet ds = new DataSet();
 using (SqlConnection conn = new SqlConnection(connStr))
 using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
 {
 da.Fill(ds, "temp");
 }

 // 2. 使用 XmlTextWriter 寫入 XML (串流式、高效能、低記憶體)
 string xmlPath = Server.MapPath("~/App_Data/qiming.xml");
 using (XmlTextWriter writer = new XmlTextWriter(xmlPath, Encoding.UTF8))
 {
 writer.Formatting = Formatting.Indented; // 縮排易讀
 writer.WriteStartDocument(); // 
 writer.WriteStartElement("xml1"); // 根元素

 foreach (DataRow row in ds.Tables["temp"].Rows)
 {
 writer.WriteStartElement("menu"); // 每筆記錄一個 
 foreach (DataColumn col in ds.Tables["temp"].Columns)
 {
 // 欄位名為屬性,值為屬性值
 writer.WriteAttributeString(col.ColumnName, row[col].ToString());
 }
 writer.WriteEndElement(); // 
 }

 writer.WriteEndElement(); // 
 writer.WriteEndDocument();
 } // using 區塊自動 Close/Flush

 // 3. 讀回顯示驗證
 string xmlContent = File.ReadAllText(xmlPath, Encoding.UTF8);
 Response.Write("
" + Server.HtmlEncode(xmlContent) + "
"); }

產出 XML 範例



 
 
 ...

進階技巧

1. 使用 XDocument (LINQ to XML) - 更現代、語法簡潔

XDocument doc = new XDocument(
 new XDeclaration("1.0", "utf-8", "yes"),
 new XElement("xml1",
 ds.Tables["temp"].Rows.Cast().Select(row =>
 new XElement("menu",
 ds.Tables["temp"].Columns.Cast().Select(col =>
 new XAttribute(col.ColumnName, row[col].ToString()))
 ))
));
doc.Save(xmlPath, SaveOptions.None);

2. 套用 XSLT 轉換


// 將 XML 轉為 HTML 表格顯示
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(Server.MapPath("~/Transform.xslt"));
xslt.Transform(xmlPath, Server.MapPath("~/Output.html"));

3. 加入 Schema (XSD) 驗證

XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("", Server.MapPath("~/Schema.xsd"));
settings.ValidationType = ValidationType.Schema;
using (XmlReader reader = XmlReader.Create(xmlPath, settings))
while (reader.Read()) { } // 驗證失敗會拋出例外

4. 大量資料分批寫入 (避免記憶體壓力)

  • `XmlTextWriter` 串流式寫入,配合 `SqlDataReader` 逐筆讀取、逐筆寫入,不需將整個 DataSet 載入記憶體。
  • 或使用 `SqlBulkCopy` 匯出至檔案再轉換。

讀取 XML 還原資料

DataSet ds = new DataSet();
ds.ReadXml(xmlPath); // 自動推斷結構
// 或 ds.ReadXmlSchema(xsdPath); ds.ReadXml(xmlPath); // 強制結構

總結

`XmlTextWriter` 是高效能產生 XML 的首選;`XDocument` 適合記憶體中構建複雜結構;`DataSet.ReadXml/WriteXml` 提供最便利的資料集雙向轉換。根據資料量、結構複雜度、效能需求選擇適當 API。

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