C# Linq to XML怎么用 Linq查询XML教程

LINQ to XML 查询 XML 的核心是将 XML 视为对象操作,分三步:加载(XDocument.Load、XElement.Load/Parse)、建模(XDocument/XElement)、查询(Elements/Element/Attribute 配合 Where/Select);支持类型安全转换、Descendants 灵活查找、可变修改及保存,并注意 PreserveWhitespace 保留格式。

c# linq to xml怎么用 linq查询xml教程

用 LINQ to XML 查询 XML,核心是把 XML 当成对象来操作,不用写一堆 XPath 或手动遍历节点。关键三步:加载 XML、用 XDocumentXElement 建模、用 LINQ 语法筛选/投影。

加载 XML 数据

支持从文件、字符串或流中读取:

  • XDocument.Load("config.xml") —— 读整个文档(含声明、注释)
  • XElement.Load("data.xml") —— 只读根元素及其子树(更常用)
  • XElement.Parse("") —— 解析字符串

查询子元素和属性

Elements()Element()Attribute() 配合 LINQ 的 WhereSelect

  • doc.Root.Elements("Book").Where(b => (string)b.Attribute("type") == "fiction")
  • doc.Root.Elements("Book").Select(b => new { Title = b.Element("Title")?.Value, Id = (int)b.Attribute("id") })
  • 注意:属性和元素值要显式转类型(如 (string)(int)),空时不会报错,返回 null 或默认值

处理嵌套与多级结构

Descendants() 查任意层级的同名元素,比 Elements() 更灵活:

奇布塔

奇布塔

基于AI生成技术的一站式有声绘本创作平台

下载

  • doc.Descendants("Author").Where(a => a.Value.Contains("Lee")) —— 找所有 Author 元素,不管在哪层
  • doc.Root.Element("Library").Elements("Shelf").Elements("Book") —— 明确路径导航
  • 避免过度用 Descendants,性能不如限定范围的 Elements

修改和保存结果

LINQ to XML 是可变模型,查完可直接改,再保存:

  • var book = doc.Root.Elements("Book").First(); book.SetElementValue("Price", "29.99");
  • book.Add(new XElement("Tag", "bestseller"));
  • doc.Save("updated.xml");doc.ToString() 获取字符串

不复杂但容易忽略:XElement 默认忽略空白文本节点,如果 XML 中有换行缩进,又需要保留格式,加载时加 LoadOptions.PreserveWhitespace

https://www.php.cn/faq/2019495.html

发表回复

Your email address will not be published. Required fields are marked *