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

C#如何根据name属性匹配获取XML节点对应的value属性值

C# 按属性匹配读取XML节点值的实现方案

你当前使用SelectNodes("//@value")的写法会匹配文档内所有value属性,必须依赖索引取值,一旦XML节点顺序调整就会拿到错误结果,可以通过带筛选条件的查询直接定位目标节点,完全不需要写死索引位置,以下是两种可直接落地的实现:

方案1:沿用现有XmlDocument,修改XPath匹配规则

不需要更换你当前使用的XML操作类,只需要把XPath改成带属性筛选的写法,调用SelectSingleNode直接取目标属性即可:

var filename = @"../../../browser.runsettings";
var xmlDoc = new XmlDocument();
xmlDoc.Load(filename);

// XPath含义:查找所有name属性值为browser的Parameter节点,直接取其value属性
var targetAttr = xmlDoc.SelectSingleNode("//Parameter[@name='browser']/@value");
// 加空判断避免节点不存在时触发空引用异常
var browserValue = targetAttr?.Value ?? string.Empty;

这种写法完全不依赖节点排列顺序,只要XML中存在name="browser"的Parameter节点就能准确取到对应value。

方案2:使用LINQ to XML实现(推荐用于新项目)

如果你的项目基于.NET Framework 3.5+、.NET Core/.NET 5+,可以用LINQ to XML的方式写查询,语义更清晰,维护成本更低:

using System.Xml.Linq;

var filename = @"../../../browser.runsettings";
var xDoc = XDocument.Load(filename);

var browserValue = xDoc.Descendants("Parameter")
    // 按name属性匹配目标节点
    .FirstOrDefault(node => node.Attribute("name")?.Value == "browser")
    // 读取对应value属性,不存在则返回空字符串
    ?.Attribute("value")?.Value ?? string.Empty;

补充说明

  • 两种实现都不需要硬编码节点索引,后续调整XML内Parameter节点的排列顺序不会影响取值结果
  • 所有取值逻辑都加了空值防护,避免XML中遗漏对应配置项时程序抛出异常
  • 如果需要读取其他参数值,只需要把匹配条件里的browser替换成目标参数名即可,比如读取系统参数就把匹配值改成os

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:39:24