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

C# 使用 XmlTextWriter 建立 XML 文件:完整方法詳解與六大範例

     編輯:關於C#

前言

XmlTextWriter 是 .NET 中以串流方式產生 XML 的核心類別,支援編碼控制、格式化縮排、命名空間、CDATA、Base64 等完整 XML 功能。本文詳細說明建構函式、核心方法,並提供六個實際範例:基本元素、屬性、巢狀結構、複製節點、CDATA、Base64 圖片編碼。

建構函式


public XmlTextWriter(TextWriter w);
public XmlTextWriter(Stream s, Encoding enc);
public XmlTextWriter(string filename, Encoding enc); // 最常用:指定檔案路徑與編碼

核心方法速查

方法用途
WriteStartDocument()寫入 XML 宣告
WriteEndDocument()關閉所有開啟元素,重設狀態
WriteStartElement(name)寫入開始標籤,支援前綴/命名空間多載
WriteEndElement()寫入結束標籤 (或自動縮寫 />)
WriteElementString(name, value)一次寫入完整元素 <name>value</name>
WriteAttributeString(name, value)在當前元素寫入屬性
WriteStartAttribute/WriteEndAttribute手動控制屬性範圍 (支援實體編碼)
WriteNode(XmlReader, bool)從 Reader 複製節點至 Writer
WriteComment(text)寫入註解 <!-- text -->
WriteCData(text)寫入 CDATA 區段
WriteBase64(buffer, index, count)二進位資料 Base64 編碼寫入
Flush()/Close()刷新緩衝區/關閉串流

六大實作範例

XML Writer 示範介面

範例 1:基本元素與文字


XmlTextWriter w = new XmlTextWriter("ex1.xml", Encoding.UTF8);
w.Formatting = Formatting.Indented;
w.WriteStartDocument();
w.WriteElementString("message", "Hello XML");
w.WriteEndDocument();
w.Close();

範例 2:屬性與巢狀元素


w.WriteStartDocument();
w.WriteStartElement("book");
w.WriteAttributeString("isbn", "978-1234567890");
w.WriteElementString("title", "C# in Depth");
w.WriteElementString("author", "Jon Skeet");
w.WriteEndElement(); // book
w.WriteEndDocument();

範例 3:WriteNode 複製現有 XML 片段

來源檔 唐詩.xml:



<唐詩>
  <五言絕句>
    <作者 字號="太白">李白
    <標題>靜夜思
    <內容>床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。
  
  ...


XmlTextReader reader = new XmlTextReader("唐詩.xml");
XmlTextWriter writer = new XmlTextWriter("copy.xml", Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
while (reader.Read())
{
    if (reader.Name == "五言絕句" && reader.NodeType == XmlNodeType.Element)
        writer.WriteNode(reader, true); // 複製整個五言絕句節點含屬性
}
writer.WriteEndDocument();
writer.Close(); reader.Close();

範例 4:完整文件結構


// 產生包含多層巢狀、屬性、註解的完整 XML

範例 5:CDATA 區段


w.WriteStartElement("script");
w.WriteCData("if (a < b) { doSomething(); }"); // 內含特殊字元無需跳脫
w.WriteEndElement();

範例 6:Base64 圖片編碼與解碼


// 編碼寫入
byte[] imgBytes = File.ReadAllBytes("photo.jpg");
w.WriteStartElement("image");
w.WriteAttributeString("format", "jpeg");
w.WriteBase64(imgBytes, 0, imgBytes.Length);
w.WriteEndElement();

// 解碼還原
XmlDocument doc = new XmlDocument();
doc.Load("image.xml");
string b64 = doc.SelectSingleNode("/image").InnerText;
byte[] restored = Convert.FromBase64String(b64);
File.WriteAllBytes("restored.jpg", restored);

最佳實務建議

  1. 永遠設定 Formatting.Indented:產生可讀 XML,除非極度在意檔案大小。
  2. using 區塊管理生命週期:using (XmlTextWriter w = new XmlTextWriter(...)) { ... } 自動 Close()。
  3. 編碼一致性:建構函式指定 Encoding,確保中文等非 ASCII 字元正確寫入。
  4. 大量資料改用 XmlWriter.Create:XmlWriter.Create(stream, settings) 提供更多設定 (如 NewLineChars, IndentChars) 且為抽象工廠模式。
  5. 現代替代方案:System.Xml.Linq.XDocument / XElement 以函數式建構 XML,語法更簡潔:new XElement("root", new XElement("child", "value"))。

結語

XmlTextWriter 以串流方式產生 XML,記憶體效率高、功能完整。掌握其核心方法與建構模式,能應對各類 XML 產出需求。新專案建議優先使用 LINQ to XML (XDocument) 享受更優雅的語法與整合查詢能力。

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