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

使用HtmlAgilityPack解析Mega Millions页面遇空引用错误求助

解决HtmlAgilityPack解析Mega Millions页面的空引用错误

错误原因分析

  1. XPath表达式错误:你用//li[@class='results']查找开奖号码,但实际class="results"是<section>标签的属性,开奖号码的<li>标签并没有results类,而是在该section下的<ul>容器内。
  2. 未处理节点为空的情况:当SelectNodes找不到匹配的节点时会返回null,直接遍历null集合会触发"对象引用未设置为对象实例"错误。

修正后的代码

String PBUrl = "https://www.usamega.com/mega-millions/results";
Cursor = Cursors.WaitCursor;
var Webget = new HtmlWeb();
var doc = Webget.Load(PBUrl);

List<int> PbNumbersList = new List<int>();
List<int> MegaBallList = new List<int>(); // 变量名适配Mega Millions,可选调整

// 获取基础开奖号码(排除带class的bonus和multiplier项)
var numberNodes = doc.DocumentNode.SelectNodes("//section[@class='results']/ul/li[not(@class)]");
if (numberNodes != null)
{
    foreach (HtmlNode node in numberNodes)
    {
        if (int.TryParse(node.InnerText.Trim(), out int num))
        {
            PbNumbersList.Add(num);
        }
    }
}

// 获取Bonus号码(Mega Ball)
var bonusNodes = doc.DocumentNode.SelectNodes("//li[@class='bonus']");
if (bonusNodes != null)
{
    foreach (HtmlNode node in bonusNodes)
    {
        if (int.TryParse(node.InnerText.Trim(), out int bonusNum))
        {
            MegaBallList.Add(bonusNum);
        }
    }
}

关键修正点说明

  • 精准定位节点:用//section[@class='results']/ul/li[not(@class)]定位基础开奖号码,匹配section容器下无class属性的li标签;保留//li[@class='bonus']定位Bonus号码,但增加空值判断。
  • 避免空引用:遍历SelectNodes返回的集合前,先判断是否为null。
  • 安全类型转换:用int.TryParse替代Convert.ToInt16,避免因文本格式异常导致程序崩溃,提升代码健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:23