C#从XmlDocument提取完整字符串

方法1:通过XmlDocumentOuterXml属性,见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);
 }
相关推荐
csdn_aspnet3 小时前
C# 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
开发语言·算法·c#
武藤一雄7 小时前
C# 设计模式大全(第一弹|7种)
microsoft·设计模式·微软·c#·.net·.netcore
格林威8 小时前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
向上的车轮9 小时前
熟悉C#如何转TypeScript——SDK与包引用
开发语言·typescript·c#
CSharp精选营10 小时前
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
c#·资源泄漏
unicrom_深圳市由你创科技11 小时前
LabVIEW和C#在工业控制中的应用差异是什么?
fpga开发·c#·labview
唐青枫13 小时前
C#.NET Consul + Steeltoe 深入解析:服务注册发现、健康检查与微服务接入
c#·.net
DowneyJoy13 小时前
【Unity3D补充知识点】常用数据结构分析-集合(List<T>)
数据结构·unity·c#·list
格林威13 小时前
Baumer相机铝型材表面划伤长度测量:实现损伤量化评估的 5 个关键技术,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
DowneyJoy14 小时前
【Unity3D补充知识点】常用数据结构分析-数组(Array)
数据结构·unity·c#