You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ-TO-XML获取指定属性值(排除自闭合节点)

用LINQ to XML提取非自闭合节点的add属性值

没问题,这事儿用LINQ to XML轻松就能实现,我给你一步步拆解,顺便解答你关于属性操作方法的疑问。

先看示例XML结构

假设你的XML文件大概是这样的(符合你需求的典型结构):

<root>
  <item add="abc1">Some content</item>
  <element add="xyz1">
    <child>Inner text</child>
  </element>
  <self-closing-node add="should-ignore" /> <!-- 这个自闭合节点要排除 -->
  <number add="10">Numeric value</number>
</root>

实现代码(C#)

下面的代码会精准提取你要的属性值:

using System.Linq;
using System.Xml.Linq;

// 加载XML文件(如果是XML字符串可以用XDocument.Parse()替代)
XDocument xmlDoc = XDocument.Load("your-file-path.xml");

// 提取目标属性值的核心查询
var addAttributeValues = xmlDoc.Descendants()
                               // 过滤掉自闭合节点:IsEmpty为true的就是自闭合节点
                               .Where(node => !node.IsEmpty)
                               // 获取这些节点上名为"add"的属性
                               .Attributes("add")
                               // 提取属性的字符串值
                               .Select(attr => attr.Value)
                               // 转成List方便后续使用
                               .ToList();

执行这段代码后,addAttributeValues就是包含abc1、xyz1、10的列表,完全符合你的预期。

关于属性操作的等效方法

你问有没有和Descendants()等效的属性遍历方法?其实LINQ to XML并没有提供直接的DescendantAttributes()方法,但我们可以通过Descendants().Attributes()的组合来实现类似效果——就像上面代码里的写法,先遍历所有后代节点,再筛选目标属性。

如果想直接遍历整个文档里的所有add属性(不管节点是否自闭合),可以简化成:

var allAddAttributes = xmlDoc.Descendants().Attributes("add").Select(a => a.Value).ToList();

但因为你需要排除自闭合节点,所以先加Where(node => !node.IsEmpty)的筛选是必要的。

内容的提问来源于stack exchange,提问作者Bumba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:02:29