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

XML两层结构下的特定产品节点存在性查询问题

XML两层结构下的特定产品节点存在性查询问题

嘿,我看你已经搞定了提取产品编号和序列号的部分,但还没把上层的status条件整合进去对吧?其实不用分开遍历,咱们直接从<result>节点入手,把所有条件一次性写到LINQ查询里就行,这样代码更简洁高效~

先理清楚你的需求:要找的是上层节点status为ACTIVE,同时其下属的<productKey>节点满足productNumber=90且sequenceNumber=1的记录是否存在。针对这个需求,我们可以直接在查询<result>节点时就把所有条件都加上:

var doc = XDocument.Parse(soapRequestResponse.Response);

// 一步到位判断是否存在符合条件的记录
bool exists = doc.Root.Descendants("result")
    .Any(result => 
        // 先检查当前result的status是否为ACTIVE
        result.Element("status")?.Value.Trim() == "ACTIVE" &&
        // 再检查当前result下是否有符合要求的productKey
        result.Descendants("productKey").Any(productKey => 
            productKey.Element("productNumber")?.Value.Trim() == "90" &&
            productKey.Element("sequenceNumber")?.Value.Trim() == "1"
        )
    );

这段代码的逻辑解释:

  • Descendants("result"):先获取XML里所有的顶层<result>节点
  • Any():LINQ里的这个方法专门用来判断是否存在符合条件的元素,比手动遍历更高效,代码也更简洁
  • ?.:这里用空条件运算符是为了避免空引用异常——如果某个<result>没有<status>节点,或者某个<productKey>缺少productNumber/sequenceNumber,代码会直接返回false而不是报错
  • 两层Any()嵌套:第一层判断status是否符合,第二层判断当前result下的productKey是否满足编号要求

如果之后你还需要获取符合条件的<result>节点的详细信息,也可以稍微修改代码:

// 获取所有符合条件的result节点详情
var matchingResults = doc.Root.Descendants("result")
    .Where(result => 
        result.Element("status")?.Value.Trim() == "ACTIVE" &&
        result.Descendants("productKey").Any(productKey => 
            productKey.Element("productNumber")?.Value.Trim() == "90" &&
            productKey.Element("sequenceNumber")?.Value.Trim() == "1"
        )
    )
    .ToList();

// 判断是否存在
bool exists = matchingResults.Any();

这样就完美解决了你既要判断产品编号序列号,又要关联上层status的需求啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:04:31