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

可以直接用 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}"); }