C#获取XML指定元素值:根据custclass取对应custval
最优实现方案推荐
针对你需要从给定XML中获取<custclass>为"CD"对应的<custval>值的需求,这里推荐两种实用的C#实现方法,其中LINQ to XML是当前最简洁高效的方案:
首先先明确你提供的XML结构:
<Reply> <customer id="1223"> <group>A</group> <class> <custclass>AB</custclass> <custval>1</custval> </class> <class> <custclass>CD</custclass> <custval>2</custval> </class> </customer> </Reply>
方法一:LINQ to XML(推荐)
这是.NET Core和现代.NET Framework项目的首选方案,代码简洁易读,且支持强类型操作:
using System.Xml.Linq; // 假设你的XML内容存储在字符串xmlStr中 string xmlStr = @"<Reply>...</Reply>"; // 替换为实际XML内容 XDocument doc = XDocument.Parse(xmlStr); // 查询目标值 string targetVal = doc.Descendants("class") .Where(c => c.Element("custclass")?.Value == "CD") .Select(c => c.Element("custval")?.Value) .FirstOrDefault(); // 处理可能的空值情况 if (!string.IsNullOrEmpty(targetVal)) { // 赋值给你的字符串变量,执行后续逻辑 }
说明:
Descendants("class")会遍历XML中所有<class>元素,无需关心嵌套层级- 使用
?.空传播运算符避免空引用异常(如果某个<class>下缺失<custclass>或<custval>元素) FirstOrDefault()确保找到第一个匹配项后立即返回,兼顾性能与实用性
方法二:XmlDocument(兼容旧项目)
如果你的项目基于.NET Framework早期版本,也可以用传统的XmlDocument配合XPath实现:
using System.Xml; XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlStr); // 也可用doc.Load()加载本地XML文件 // 使用XPath定位目标节点 XmlNode custValNode = doc.SelectSingleNode("//class[custclass='CD']/custval"); string targetVal = custValNode?.InnerText; // 后续空值处理逻辑同上
说明:
- XPath表达式
//class[custclass='CD']/custval直接定位到符合条件的<custval>节点 - 同样需要处理节点为null的情况,避免空引用错误
总结
优先选择LINQ to XML方案,它的代码更简洁、可读性更强,且在现代.NET环境下性能表现优异。如果是维护旧项目,XmlDocument方案也是可靠的选择。
内容的提问来源于stack exchange,提问作者user2208746
相关产品推荐
相关产品推荐

