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

如何在XDocument中按属性过滤获取指定后代Data元素的取值

问题分析

你的代码存在3个核心错误导致无法匹配到元素:

  1. 筛选对象错误:xdc.Descendants("europa3000_BASIC_DATA_CFG")获取的是XML根节点,根节点本身没有Key属性,第一个Where筛选就没有符合条件的元素,后续逻辑自然返回空。
  2. 筛选逻辑冲突:连续两个Where是「与」的关系,要求同一个元素同时满足Key="Basic_Data1"和Key=你指定的fieldname,两个值完全不同,不可能有元素同时满足条件。
  3. 未定位到目标节点:你需要查找的是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:27:03