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

C# XmlDocument 轉字串:MemoryStream + XmlTextWriter 完整實作與 XmlDocument.OuterXml 簡易替代

     編輯:關於C#

標準序列化實作 (可控制縮排、編碼)

public static string XmlDocumentToString(XmlDocument xmlDoc, bool indent = true, Encoding encoding = null)
{
    if (xmlDoc == null) throw new ArgumentNullException(nameof(xmlDoc));

    encoding ??= Encoding.UTF8;

    using (var ms = new MemoryStream())
    {
        var settings = new XmlWriterSettings
        {
            Encoding = encoding,
            Indent = indent,
            IndentChars = "  ",
            NewLineChars = Environment.NewLine,
            OmitXmlDeclaration = false // true 則不輸出 
        };

        using (var writer = XmlWriter.Create(ms, settings))
        {
            xmlDoc.Save(writer); // 寫入 MemoryStream
        }

        // 取得位元組陣列並解碼
        return encoding.GetString(ms.ToArray());
    }
}

最簡單做法:OuterXml (無縮排控制)

string xmlString = xmlDoc.OuterXml; // 含 XML 宣告、無縮排、UTF-16 (內部)
// 若需指定編碼,仍需用 MemoryStream + XmlWriter

兩種方式差異對照

特性OuterXmlXmlWriter + MemoryStream
縮排/美化無 (單行)可控制 (Indent/IndentChars)
編碼內部 UTF-16 字串可指定 UTF-8、BigEndianUnicode 等
XML 宣告含可控制 (OmitXmlDeclaration)
效能極快 (直接回傳內部字串)稍慢 (序列化+解碼)
適用場景除錯、日誌、小型 XML檔案儲存、網路傳輸、人工閱讀

使用範例

var doc = new XmlDocument();
doc.LoadXml("AB");

// 1. 簡易輸出
Console.WriteLine(doc.OuterXml);
// AB

// 2. 美化輸出 (適合存檔)
string pretty = XmlDocumentToString(doc, indent: true);
Console.WriteLine(pretty);
/*


  A
  B

*/

// 3. 指定編碼儲存檔案
File.WriteAllText(@"C:\Output\pretty.xml", pretty, Encoding.UTF8);

進階:移除 XML 宣告、自訂命名空間前綴

var settings = new XmlWriterSettings
{
    OmitXmlDeclaration = true, // 不輸出 
    NamespaceHandling = NamespaceHandling.OmitDuplicates // 移除重複 xmlns
};
// 結合 XmlWriter.Create 使用

參考資源

原文連結:https://www.bianceng.cn/Programming/csharp/201410/45485.htm

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