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

C#读取XML时XmlNodeList计数为0,求原因及解决方法

问题原因及解决方法

核心问题:XPath 路径错误

你的代码中使用的 XPath /config_set/measurement/setting 存在逻辑错误:

  • root 变量指向的是 XML 的根节点 <Amp_config>,而以 / 开头的 XPath 是绝对路径,会从整个文档的根层级开始查找,而非从当前 root 节点的子节点开始。
  • 你的 XML 文档的根节点是 <Amp_config>,而非 <config_set>,因此当前的绝对路径无法匹配到任何节点。

解决方法

方法一:使用相对路径(推荐)

去掉 XPath 开头的 /,让查询相对于 root 节点(即 <Amp_config>)进行:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"C:\myXmls\new1.xml");

XmlNode root = xmlDocument.DocumentElement;
// 相对路径:从root节点下查找config_set及其子节点
XmlNodeList xmlNode = root.SelectNodes("config_set/measurement/setting");
foreach (XmlNode xn in xmlNode)
{
    string limit_high = xn["limit_high"].InnerText;
    string limit_low = xn["limit_low"].InnerText;
    Console.WriteLine("Name: {0} {1}", limit_high, limit_low);
}

方法二:使用完整绝对路径

如果坚持使用绝对路径,需要包含根节点 <Amp_config>:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"C:\myXmls\new1.xml");

// 完整绝对路径:从文档根开始,包含所有层级节点
XmlNodeList xmlNode = xmlDocument.SelectNodes("/Amp_config/config_set/measurement/setting");
foreach (XmlNode xn in xmlNode)
{
    string limit_high = xn["limit_high"].InnerText;
    string limit_low = xn["limit_low"].InnerText;
    Console.WriteLine("Name: {0} {1}", limit_high, limit_low);
}

额外检查项

  1. 确认 XML 文件路径正确,文件确实存在于 C:\myXmls\new1.xml
  2. 确认 XML 文件格式无语法错误(如未闭合标签、属性引号缺失等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:01:41