C#HtmlAgilityPack从给定类的所有div获取内容

时间:2017-02-06 19:58:03

标签: c# html

我有一个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;的未处理异常。

1 个答案:

答案 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