異構系統整合、離線資料匯出、Web Service 回傳、設定檔儲存等情境,XML 作為平台無關的中介格式極為適合。ASP.NET 內建 `XmlTextWriter`/`XmlDocument`/`XDocument` 提供高效能 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"); // 每筆記錄一個
}
writer.WriteEndElement(); //
writer.WriteEndDocument();
} // using 區塊自動 Close/Flush
// 3. 讀回顯示驗證
string xmlContent = File.ReadAllText(xmlPath, Encoding.UTF8);
Response.Write("" + Server.HtmlEncode(xmlContent) + "
");
}
...
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);
// 將 XML 轉為 HTML 表格顯示
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(Server.MapPath("~/Transform.xslt"));
xslt.Transform(xmlPath, Server.MapPath("~/Output.html"));
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()) { } // 驗證失敗會拋出例外
DataSet ds = new DataSet();
ds.ReadXml(xmlPath); // 自動推斷結構
// 或 ds.ReadXmlSchema(xsdPath); ds.ReadXml(xmlPath); // 強制結構
`XmlTextWriter` 是高效能產生 XML 的首選;`XDocument` 適合記憶體中構建複雜結構;`DataSet.ReadXml/WriteXml` 提供最便利的資料集雙向轉換。根據資料量、結構複雜度、效能需求選擇適當 API。