如何在XDocument中按属性过滤获取指定后代Data元素的取值
问题分析
你的代码存在3个核心错误导致无法匹配到元素:
- 筛选对象错误:
xdc.Descendants("europa3000_BASIC_DATA_CFG")获取的是XML根节点,根节点本身没有Key属性,第一个Where筛选就没有符合条件的元素,后续逻辑自然返回空。 - 筛选逻辑冲突:连续两个Where是「与」的关系,要求同一个元素同时满足
Key="Basic_Data1"和Key=你指定的fieldname,两个值完全不同,不可能有元素同时满足条件。 - 未定位到目标节点:你需要查找的是
Data标签,但你的查询全程没有定位到Data节点,筛选层级完全错误。
正确实现
场景1:查找全局所有匹配Key的Data元素
如果不需要限定所属GROUP,直接全局查找即可:
var fieldname = "DefaultVATCode"; // 查找所有Data后代元素,匹配Key属性值 var ele = xdc.Descendants("Data") .FirstOrDefault(x => (string)x.Attribute("Key") == fieldname); // 获取元素值,空值保护避免抛异常 var value = ele?.Value;
场景2:限定在Key为Basic_Data1的GROUP下查找
如果需要指定父GROUP的范围,先筛选GROUP再查找内部Data:
var fieldname = "DefaultVATCode"; var ele = xdc.Descendants("GROUP") // 先找到Key为Basic_Data1的GROUP节点 .FirstOrDefault(g => (string)g.Attribute("Key") == "Basic_Data1") // 再查找该GROUP下匹配Key的Data节点 ?.Descendants("Data") .FirstOrDefault(d => (string)d.Attribute("Key") == fieldname); var value = ele?.Value;
内容的提问来源于stack exchange,提问作者BennoDual
相关产品推荐
相关产品推荐

