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); }
额外检查项
- 确认 XML 文件路径正确,文件确实存在于
C:\myXmls\new1.xml - 确认 XML 文件格式无语法错误(如未闭合标签、属性引号缺失等)
内容的提问来源于stack exchange,提问作者axcelenator
相关产品推荐
相关产品推荐

