C#如何从内存中的字符串创建XmlDocument

9次阅读

可直接用 XmlDocument.LoadXml()加载格式良好的 XML 字符串;需确保有根元素、标签闭合,不支持 DTD/ 外部实体;编码声明被识别但不影响解析;字符串须为。NET string 类型,不可手动编码转换;需高级功能时配合 XmlReader。

C# 如何从内存中的字符串创建 XmlDocument

可以直接用 XmlDocument.LoadXml() 方法,把字符串内容加载为 XmlDocument 对象。

使用 LoadXml 加载字符串

这是最直接的方式,适用于格式良好(well-formed)的 XML 字符串:

  • 字符串必须是合法的 XML,不能缺少根元素或标签不闭合
  • 不支持 DTD 或外部实体(默认禁止,避免 XXE 攻击)
  • 编码 声明(如 <?xml version="1.0" encoding="utf-8"?>)会被识别,但实际解析不依赖它——字符串本身是 UTF-16(.NET string 内部编码)

示例:

string xml = @"<root><item id='1'>Hello</item></root>"; XmlDocument doc = new XmlDocument(); doc.LoadXml(xml);

处理带 BOM 或编码不一致的字符串

如果 XML 字符串来自文件读取、网络响应等,可能含 UTF-8 BOM 或声明为其他编码(如 encoding="gb2312"),但 .NET 的 string 已是解码后的 Unicode。只要字符串内容本身结构正确,LoadXml 就能正常工作。

⚠️ 注意:不要手动用 Encoding.UTF8.GetBytes() 再转成字符串传入——这会导致乱码。原始 XML 字符串应保持为 .NET string 类型直接传入。

需要验证或自定义解析时用 XmlReader

若需校验 DTD、启用内联 Schema、控制命名空间处理,或想捕获更详细的解析错误,可配合 XmlReader

  • 创建 XmlReaderSettings,设置 DtdProcessing = DtdProcessing.Parse(慎用)、ValidationType = ValidationType.Schema
  • XmlReader.Create(new StringReader(xml), settings) 构造 reader
  • 再调用 doc.Load(reader)

示例(仅启用 DTD 解析):

var settings = new XmlReaderSettings {DtdProcessing = DtdProcessing.Parse}; using var reader = XmlReader.Create(new StringReader(xml), settings); doc.Load(reader);

异常处理建议

LoadXml() 遇到格式错误会抛出 XmlException,建议捕获并提示具体位置:

try {doc.LoadXml(xml); } catch (XmlException ex) {Console.WriteLine($"XML 解析失败,行 {ex.LineNumber},列 {ex.LinePosition}:{ex.Message}"); }

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-22发表,共计1259字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources