C# XDocument.Parse()和XDocument.Load()的区别

2次阅读

xdocument.parse() 用于解析xml字符串,仅接受格式正确的String参数;xdocument.load() 用于从文件路径、stream、textreader或xmlreader等外部源加载xml,支持自动编码识别但可能因io问题抛出额外异常。

C# XDocument.Parse()和XDocument.Load()的区别

XDocument.Parse() 用于从字符串(XML 文本)解析生成 XDocument 对象XDocument.Load() 用于从文件路径、流(Stream)、TextReader 或 XmlReader 等外部源加载并构建 XDocument。

输入来源不同

Parse() 只接受一个 string 参数,内容必须是格式正确的 XML 字符串。例如:

  • XDocument doc = XDocument.Parse("<root><item>A</item></root>");

Load() 支持多种输入形式:

  • 文件路径:XDocument.Load("data.xml")
  • FileStreamXDocument.Load(new FileStream("data.xml", FileMode.Open))
  • XmlReader:XDocument.Load(XmlReader.Create("data.xml"))
  • TextReader:XDocument.Load(new StringReader(xmlString))

错误处理行为略有差异

两者都会在 XML 格式错误时抛出 XmlException,但 Parse() 更“纯粹”——它不涉及文件系统或编码探测;Load() 在读取文件时会尝试自动识别编码(如通过 bom 或 XML 声明),也可能因路径不存在、权限不足等抛出其他异常(如 FileNotFoundExceptionUnauthorizedAccessException)。

性能与使用场景

如果已有 XML 字符串(比如来自网络响应、数据库字段或拼接结果),用 Parse() 更直接;如果要读取磁盘上的 XML 文件或远程流,Load() 更合适,且内部做了流式读取优化,对大文件更友好。

注意编码和声明一致性

Parse() 完全依赖字符串本身的 UTF-16/UTF-8 编码(.NET string 是 UTF-16);Load() 读文件时若 XML 声明指定了编码(如 <?xml version="1.0" encoding="GBK"?>),但实际文件不是该编码,就可能出错。建议确保声明与真实编码一致,或用 XmlReader 显式指定编码再传给 Load()。

基本上就这些。选哪个取决于你手里的数据是“字符串”还是“可读的资源”。

text=ZqhQzanResources