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

C#中解析指定XML内Favorite节点内容的最简实现方法

回答

完全可以使用XDocument搭配LINQ扩展方法完成需求,这也是C#中做这类简单XML节点查询的最简实现方式,不需要编写完整的XML序列化/反序列化逻辑。

前置依赖

你只需要引入系统自带的System.Xml.Linq命名空间即可,所有.NET版本(.NET Framework 3.5+、.NET Core/.NET 5+)都原生支持该能力,无需引入第三方包。

最简实现代码

using System.Xml.Linq;
using System.Linq;

// 1. 加载XML:如果是XML字符串用Parse,读取本地XML文件就换成XDocument.Load("你的文件路径.xml")
XDocument xmlDoc = XDocument.Parse(@"
<Guy>
<Name>
    <Root> 
        <Entry>
            <Favorite> his favorite food is sushi </Favorite>
        </Entry>
    </Root>
</Name>
</Guy>");

// 2. 查询目标节点并取文本
string favoriteContent = xmlDoc.Descendants("Favorite")
    .FirstOrDefault()? // 取第一个名为Favorite的节点,不存在则返回null
    .Value?
    .Trim(); // 清除文本前后的换行、空格冗余字符

// 最终favoriteContent的值就是"his favorite food is sushi"

代码说明

  • Descendants("Favorite")会自动遍历XML全文档,查找所有名称为Favorite的节点,不需要你手动逐层写Guy -> Name -> Root -> Entry的节点路径,容错性更高,后续XML层级调整只要节点名不变,代码不需要修改。
  • 空传播运算符?.是C# 6及以上版本支持的安全写法,可以避免XML结构缺失、找不到目标节点时抛出空引用异常。
  • 直接读取节点Value属性拿到的文本会保留原XML里标签前后的空白字符(换行、缩进空格),调用Trim()就能得到干净的目标文本。

严格匹配层级的写法(可选)

如果你的XML里可能存在多个同名Favorite节点,需要严格按照你给出的结构路径查询,可以用逐层定位的写法,避免匹配到其他位置的同名节点:

string favoriteContent = xmlDoc.Element("Guy")
    ?.Element("Name")
    ?.Element("Root")
    ?.Element("Entry")
    ?.Element("Favorite")
    ?.Value
    ?.Trim();

这种场景下不需要使用XML序列化:序列化需要你提前定义和XML结构一一对应的多个实体类,仅获取单个节点值的话代码冗余度很高,LINQ to XML是更轻量高效的选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:36:28