C#从XmlDocument提取完整字符串

方法1:通过XmlDocument的OuterXml属性,见XmlDocument类

该方法获得的xml字符串是不带格式的,可读性差

方法2:利用XmlWriterSettings控制格式等一系列参数,见XmlWriterSettings类

例子:

csharp 复制代码
using System.IO;
using System.Text;
using System.Xml;
...
XmlDocument doc = new XmlDocument();
doc.LoadXml("<item><name>wrench</name></item>");
// 使用XmlWriterSettings来控制格式化输出
XmlWriterSettings settings = new XmlWriterSettings
{
	Encoding = Encoding.UTF8,
    Indent = true,
    IndentChars = "  ", // 设置缩进字符和大小
    NewLineChars = "\r\n" // 设置换行符
};
using (StringWriter textWriter = new StringWriter())
{
    using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
    {
        doc.Save(xmlWriter); // 将XML写入StringWriter
    }
    string xmlString = textWriter.ToString(); // 获取字符串
    Console.WriteLine(xmlString);
}

通过StringWriter作为输出流有一个弊端,它默认按照UTF16编码,无法更改,譬如上面的XmlWriterSettings指定了UTF8但实际得到的字符串仍然是UTF16的

改用MemoryStream作为流可以自定义编码,如下:

csharp 复制代码
using (MemoryStream ms = new MemoryStream())  
{
     using (XmlWriter xmlWriter = XmlWriter.Create(ms, settings))
     {
         doc.Save(xmlWriter); // 将XML写入MemoryStream
     }
     string xmlString = Encoding.UTF8.GetString(ms.ToArray());  // 获取字符串
     Console.WriteLine(xmlString);
 }
相关推荐
He BianGu15 小时前
【笔记】C# 中BindingFlags的详细作用
笔记·c#
?abc!15 小时前
(贪心)621. 任务调度器
java·前端·c#
开开心心就好17 小时前
电脑小说阅读器,支持朗读和自定义皮肤
服务器·开发语言·javascript·算法·pdf·c#·音视频
淡海水18 小时前
07-06-源码-.NET Core GC的极致优化技术
unity·架构·c#·.netcore·gc·1024程序员节
万化冥合19 小时前
怎么批量把 Word 转 PDF?
python·pdf·c#·word
淡海水1 天前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
吴可可1231 天前
C#调用摄像头拍照的三种API方案
c#
Msir_Modern2 天前
Noita 元胞沙盒笔记
算法·unity·c#·游戏引擎·元胞自动机
星之擎2 天前
Task 很优雅的取消方式是什么?C# 里面。
开发语言·c#
czhc11400756632 天前
一周概念复盘:预热、漂移与门禁
c#