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

ASP.NET中从XML文件统计数量大于10的采购记录数的实现问题求助

解决XmlDocument筛选quantity>10的采购记录并统计数量的问题

你遇到的「Expression must evaluate to node error」错误,核心是XPath表达式语法错误,再加上你误用了SelectSingleNode(只能返回单个节点)而非批量筛选的SelectNodes,导致逻辑走不通。我给你修正一下代码,非常简洁直接:

修正后的XmlDocument实现代码

using System.Xml;
using System;
using System.IO;

// 注意你原来的变量名FILENAME1和FILENAME不一致,这里统一修正
const string FILENAME = "GoodXML.xml";
string file1 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FILENAME);
XmlDocument doc = new XmlDocument();
doc.Load(file1);

// 修正XPath语法:去掉Purchase后面的多余斜杠,将筛选条件直接写在节点的方括号内
XmlNodeList matchingPurchases = doc.SelectNodes("/PurchaseCollection/purchases/Purchase[quantity>10]");

// 直接统计符合条件的节点数量,赋值给Label
Label1.Text = $"符合条件的采购记录总数:{matchingPurchases.Count}";

错误点说明

  1. XPath语法错误:你原来的/PurchaseCollection/purchases/Purchase/[quantity>10]多了一个斜杠,正确写法是Purchase[quantity>10]——方括号直接跟在要筛选的节点(Purchase)后面,用来指定筛选条件。
  2. 选错了方法:SelectSingleNode只会返回第一个匹配的节点,而你需要统计所有符合条件的记录,所以要用SelectNodes返回节点列表,再取它的Count属性。
  3. 变量名不一致:你定义了FILENAME1但后面用了FILENAME,这会导致编译错误,我已经统一修正。

可选:更简洁的LINQ to XML写法

如果你愿意尝试更现代的写法,LINQ to XML会更直观,代码量更少:

using System.Xml.Linq;

XDocument xDoc = XDocument.Load(file1);
int count = xDoc.Descendants("Purchase")
                .Where(p => (int)p.Element("quantity") > 10)
                .Count();
Label1.Text = $"符合条件的采购记录总数:{count}";

这个写法不需要写复杂的XPath,直接用LINQ表达式筛选,可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:58:12