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

如何在C#中基于多个属性查找XElement的Descendant节点

多属性定位XML节点的C#实现示例

多条件匹配节点的查询逻辑优化

原代码仅通过_PatientName子元素匹配_PATIENTDETAILS节点,要加入_PatientAccNo、_HicNo、_MedRecNo三个子元素作为匹配条件,只需扩展Where中的判断逻辑即可。假设你已持有对应字段的目标值(如currentPatientAccNo、currentHicNo、currentMedRecNo),修改后的查询代码如下:

// 定义需要匹配的所有目标字段值
string currentPatientName = "目标患者姓名";
string currentPatientAccNo = "目标患者账号";
string currentHicNo = "目标HIC编号";
string currentMedRecNo = "目标病历号";

// 多维度精准匹配_PATIENTDETAILS节点
XElement patient = xmlDoc.Descendants(ns + "_PATIENTDETAILS")
    .FirstOrDefault(x => 
        (string)x.Element(ns + "_PatientName") == currentPatientName &&
        (string)x.Element(ns + "_PatientAccNo") == currentPatientAccNo &&
        (string)x.Element(ns + "_HicNo") == currentHicNo &&
        (string)x.Element(ns + "_MedRecNo") == currentMedRecNo);

修正后续元素添加逻辑

原后续代码存在两处逻辑问题,需同步调整:

  1. patient.Element("_PATIENTDETAILS"):patient本身就是定位到的_PATIENTDETAILS节点,无需再次查找其子节点
  2. xmlDoc.Element("_OCROUTPUT").Element("_PATIENTDETAILS"):直接取根节点下的_PATIENTDETAILS会跳过你精准定位的目标节点,应直接使用已找到的patient节点操作

修正后的添加代码示例:

if (patient != null) // 先判断节点是否找到,避免空引用异常
{
    patient.Add(new XElement(ns + "_SERVICELINES",
        new XElement(ns + "字段名1", "对应数据"),
        new XElement(ns + "字段名2", "对应数据")
        // 按需添加其他子元素
    ));
}

关键注意点

  • 所有子元素名称必须带上命名空间ns,避免因命名空间不匹配导致查找或添加失败
  • 若部分字段允许空值匹配,可调整判断逻辑(比如使用string.Equals并指定忽略大小写,或增加空值兼容判断)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:55:42