C#如何从XML字符串加载数据 XDocument.Parse

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

XDocument.Parse 是 C# 中用于将 XML 字符串解析为内存中可操作的 XDocument 对象的核心方法。它适用于已知格式合法、内容可信的 XML 文本,不进行文件读取,只做字符串解析。

基本用法:直接解析字符串

只要 XML 字符串语法正确(有且仅有一个根元素、标签闭合、编码一致等),调用 Parse 即可:

  • 传入完整 XML 字符串(含声明如 可选)
  • 返回 XDocument 实例,支持 LINQ to XML 查询(DescendantsElementsAttribute 等)
  • 若字符串非法(如根节点缺失、标签未闭合),会抛出 XmlException

常见问题与处理建议

实际使用中需注意以下几点:

  • 确保字符串编码与内容匹配(如 UTF-8 字符串不要被误当 ANSI 解析);若含中文或特殊字符,推荐统一用 UTF-8 并在 XML 声明中明确标注 encoding="utf-8"
  • 避免直接解析不可信输入(如用户提交的 XML),应先校验或改用 XDocument.Load(TextReader) 配合自定义 XmlReaderSettings 控制 DTD/实体解析
  • 空字符串、null 或仅空白字符会引发异常,调用前建议加判断:if (!string.IsNullOrWhiteSpace(xmlStr)) { ... }

简单示例:解析并提取数据

例如解析如下字符串:

AppleBanana

代码可写为:

  • 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+)