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

使用XMLDocument获取XML中<link-entity>节点下的所有<condition>节点

问题描述

给定如下XML结构:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">  
  <entity name="contact">    
    <attribute name="contactid" />    
    <link-entity name="ccl1007_studentjourney" from="ccl1007_contactid" to="contactid">      
      <filter type="and">        
        <condition attribute="statecode" operator="eq" value="0" />        
        <filter type="or">          
          <condition attribute="ccl1007_sjapplicantdayattendedon" operator="last-x-months" value="12" />          
          <condition attribute="ccl1007_sjapplicantdayattendedon" operator="next-x-years" value="5" />        
        </filter>      
      </filter>    
    </link-entity>    
    <filter>      
      <condition attribute="contactid" operator="eq" value="234" />    
    </filter>  
  </entity>
</fetch>

需要获取所有位于<link-entity>节点下的<condition>节点,忽略其他位置的(比如最外层<filter>里的那个),目标是拿到指定的3个<condition>节点。

解决方案

下面提供两种在C#中实现的方法:

方法1:使用XPath

XPath可以直接定位到符合要求的节点,写法简洁:

using System.Xml;

// 加载XML文档
XmlDocument doc = new XmlDocument();
doc.LoadXml("你的XML字符串"); // 或者用doc.Load("文件路径")加载本地文件

// 用XPath选择所有<link-entity>下的<condition>节点
XmlNodeList conditionNodes = doc.SelectNodes("//link-entity//condition");

// 遍历输出结果
foreach (XmlNode node in conditionNodes)
{
    Console.WriteLine(node.OuterXml); // 输出节点的完整XML内容
}

//link-entity//condition的含义:

  • //link-entity:匹配文档中所有<link-entity>节点
  • //condition:匹配该节点下所有层级的<condition>子节点(不管嵌套多少层<filter>)

方法2:使用LINQ to XML

如果项目中已经使用LINQ,这种方式更符合现代C#风格:

using System.Xml.Linq;

// 加载XML
XDocument doc = XDocument.Parse("你的XML字符串"); // 或者XDocument.Load("文件路径")

// 查询所有<link-entity>下的<condition>节点
var conditionElements = doc.Descendants("link-entity")
                           .Descendants("condition");

// 遍历输出
foreach (var element in conditionElements)
{
    Console.WriteLine(element.ToString());
}

Descendants("link-entity")会找到所有<link-entity>节点,再调用Descendants("condition")就能获取该节点下所有层级的<condition>元素,自动忽略其他位置的节点。

这两种方法都能精准获取你需要的3个<condition>节点,不会包含外层<filter>里的那个节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:02:34