XmlTextWriter 串流輸出模式
- 唯寫、前進、快速、低記憶體,無法回頭修改已寫內容。
- 適合大量資料一次性輸出。
XmlDocument 物件模型模式
- 在記憶體建立完整 DOM 樹,**可隨時查詢、修改、刪除**節點。
- 較慢、佔記憶體,但極具彈性。
XmlDocument 實作範例
XmlDocument doc = new XmlDocument();
doc.AppendChild(doc.CreateElement("Table"));
using (OleDbConnection conn = new OleDbConnection(connStr))
{
conn.Open();
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM Customers";
using (OleDbDataReader rd = cmd.ExecuteReader())
{
int fc = rd.FieldCount;
string[] names = new string[fc];
for (int i = 0; i < fc; i++) names[i] = rd.GetName(i);
while (rd.Read())
{
XmlElement rec = doc.CreateElement("Record");
doc.DocumentElement.AppendChild(rec);
for (int i = 0; i < fc; i++)
{
XmlElement fld = doc.CreateElement(names[i]);
rec.AppendChild(fld);
object v = rd.GetValue(i);
if (v == null || v == DBNull.Value)
fld.SetAttribute("Null", "1");
else
fld.AppendChild(doc.CreateTextNode(v.ToString()));
}
}
}
}
}
// XSLT 或直接輸出
if (Request.QueryString["xsl"] != null) { /* Transform */ }
else Response.Write(doc.DocumentElement.OuterXml);
關鍵差異提醒
XmlTextWriter 需手動管理配對呼叫(WriteStartElement/WriteEndElement)。
XmlDocument 以樹狀結構直觀操作,適合需後續處理的情境。