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
相关产品推荐
相关产品推荐

