我有一个HTML文件,如下所示:
<div class="user_meals">
<div class="name">Name Surname</div>
<div class="day_meals">
<div class="meal">First Meal</div>
</div>
<div class="day_meals">
<div class="meal">Second Meal</div>
</div>
<div class="day_meals">
<div class="meal">Third Meal</div>
</div>
<div class="day_meals">
<div class="meal">Fourth Meal</div>
</div>
<div class="day_meals">
<div class="meal">Fifth Meal</div>
</div>
此代码重复几次。
我希望获得姓名和姓氏,这是<div>
标记与类&#34;名称&#34;之间。
这是我使用HtmlAgilityPack的代码:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"C:\workspace\file.html");
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='name']"))
{
string vaule = node.InnerText;
}
但实际上它并没有奏效。 Visual Studio引发了异常:
类型&#39; System.NullReferenceException&#39;的未处理异常。
答案 0 :(得分:0)
您使用错误的方法从路径Load
加载HTML,而不是文件的位置。请改用SelectNodes
。
您获得的错误非常具有误导性,因为所有属性都不为空且What is a NullReferenceException, and how do I fix it?的标准提示不适用。
基本上,这来自事实null
正确返回foreach
,因为没有匹配查询的元素,而HtmlDocument doc = new HtmlDocument();
// either doc.Load(@"C:\workspace\file.html") or pass HTML:
doc.LoadHtml("<div class='user_meals'><div class='name'>Name Surname</div></div> ");
var nodes = doc.DocumentNode.SelectNodes("//div[@class='name']");
// SelectNodes returns null if nothing found - may need to check
if (nodes == null)
{
throw new InvalidOperationException("Where all my nodes???");
}
foreach (HtmlNode node in nodes)
{
string vaule = node.InnerText;
vaule.Dump();
}
会抛出它。
固定代码:
div