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);
 }
相关推荐
唐青枫40 分钟前
C#.NET HttpClient 使用教程
c#·.net
夜空晚星灿烂1 小时前
C# 网络编程-关于HttpClient使用方式(三)
开发语言·网络·c#
甄天2 小时前
WPF Style样式 全局样式资源字典
c#·wpf
夜空晚星灿烂4 小时前
C# 网络编程-关于HttpWebRequest使用方式(二)
开发语言·c#
王中阳Go14 小时前
北京京东,看看难度
c#·linq
周杰伦fans16 小时前
C# 中 string.Compare 比较两个字符串的字典顺序
c#
上位机付工16 小时前
西门子S7通信协议抓包分析应用
c#·wireshark·上位机·plc·抓包·s7协议·西门子
上位机付工21 小时前
C#上位机实现报警语音播报
开发语言·c#·上位机·plc·运动控制卡·语音播报·报警播报
benben04421 小时前
Unity3D仿星露谷物语开发67之创建新的NPC
开发语言·游戏·ui·c#·游戏引擎
小码编匠1 天前
面向工业应用的点云相机控制接口库(含C#调用示例)
后端·c#·.net