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

C# DataSet 匯出 XML 時自訂欄位格式化

     編輯:關於C#

需求背景

DataSet.WriteXml 直接輸出的日期時間與數值格式固定,無法符合特定呈現需求(如中文日期格式、貨幣符號)。解決方案:使用 XmlTextReader/XmlTextWriter 逐節點轉寫,配合 XmlConvert 進行型別轉換與格式化。

實作範例

private void btnWriteDataSetToXml_Click(object sender, EventArgs e) {
    string xmlPath = @"C:\DataSetOutputXml.xml";
    try {
        using (XmlTextReader reader = new XmlTextReader(ds.GetXml(), XmlNodeType.Element, null))
        using (XmlTextWriter writer = new XmlTextWriter(xmlPath, Encoding.UTF8)) {
            writer.Formatting = Formatting.Indented;
            writer.Indentation = 4;
            writer.WriteStartDocument();

            string currentElement = "";
            while (reader.Read()) {
                switch (reader.NodeType) {
                    case XmlNodeType.Element:
                        writer.WriteStartElement(reader.Name);
                        currentElement = reader.Name;
                        break;
                    case XmlNodeType.Text:
                        switch (currentElement.ToLower()) {
                            case "出生日期":
                                // 自訂完整中文日期格式
                                writer.WriteString(
                                    XmlConvert.ToDateTime(reader.Value, XmlDateTimeSerializationMode.Local)
                                    .ToString("yyyy 年 MMMM dd 號 dddd,時間 HH 點 mm 分 ss 秒"));
                                break;
                            case "雇用日期":
                            case "加薪日期":
                                // 短日期格式
                                writer.WriteString(
                                    XmlConvert.ToDateTime(reader.Value, XmlDateTimeSerializationMode.Local)
                                    .ToString("d"));
                                break;
                            case "起薪":
                            case "目前薪資":
                                // 貨幣格式
                                writer.WriteString(
                                    XmlConvert.ToDecimal(reader.Value).ToString("c"));
                                break;
                            default:
                                writer.WriteString(reader.Value);
                                break;
                        }
                        break;
                    case XmlNodeType.EndElement:
                        writer.WriteEndElement();
                        break;
                }
            }
        }
        txtXmlResult.Text = File.ReadAllText(xmlPath);
    } catch (Exception ex) {
        MessageBox.Show(ex.Message);
    }
}

執行結果

格式化後 XML 輸出

輸出 XML 中日期欄位顯示為「2008 年 January 15 號 Tuesday,時間 08 點 30 分 00 秒」,薪資欄位顯示為「$45,000.00」等本地化格式。

替代方案:XSLT 轉換

另可先輸出標準 XML,再套用 XSLT 樣式表轉換格式,適合複雜或可重複使用的格式化邏輯。

關鍵類別

  • XmlConvert:提供符合 XML Schema 標準的型別轉換(ToDateTime、ToDecimal 等)。
  • XmlTextWriter:控制縮排、編碼、元素寫入。
  • XmlDateTimeSerializationMode:指定時區處理模式(Local/Utc/Unspecified)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved