XDocument.Parse 是 C# 中将合法 XML 字符串解析为 XDocument 对象的方法,要求格式正确、编码匹配,不支持不可信输入或异步操作,异常时抛 XmlException。

XDocument.Parse 是 C# 中用于将 XML 字符串解析为内存中可操作的 XDocument 对象的核心方法。它适用于已知格式合法、内容可信的 XML 文本,不进行文件读取,只做字符串解析。
基本用法:直接解析字符串
只要 XML 字符串语法正确(有且仅有一个根元素、标签闭合、编码一致等),调用 Parse 即可:
- 传入完整 XML 字符串(含声明如
可选) - 返回
XDocument实例,支持 LINQ to XML 查询(Descendants、Elements、Attribute等) - 若字符串非法(如根节点缺失、标签未闭合),会抛出
XmlException
常见问题与处理建议
实际使用中需注意以下几点:
- 确保字符串编码与内容匹配(如 UTF-8 字符串不要被误当 ANSI 解析);若含中文或特殊字符,推荐统一用 UTF-8 并在 XML 声明中明确标注
encoding="utf-8" - 避免直接解析不可信输入(如用户提交的 XML),应先校验或改用
XDocument.Load(TextReader)配合自定义XmlReaderSettings控制 DTD/实体解析 - 空字符串、null 或仅空白字符会引发异常,调用前建议加判断:
if (!string.IsNullOrWhiteSpace(xmlStr)) { ... }
简单示例:解析并提取数据
例如解析如下字符串:
代码可写为:
var doc = XDocument.Parse(xmlString);var items = doc.Root.Elements("item").Select(x => new { Id = (int)x.Attribute("id"), Name = x.Value });- 结果得到两个匿名对象:
{ Id=1, Name="Apple" }和{ Id=2, Name="Banana" }
替代方案参考
根据场景不同,也可考虑:
-
XDocument.Load(string fileName):从文件路径加载 -
XDocument.Load(Stream)或XDocument.Load(XmlReader):更适合控制解析行为(如禁用 DTD、设置命名空间) -
XDocument.Parse不支持异步,如需处理大 XML 或网络响应流,应转用XDocument.LoadAsync(需 .NET Core 3.0+ 或 .NET 5+)










