C#Html Agility Pack dd和dt标签解析问题

时间:2011-06-11 12:27:11

标签: c# html-agility-pack dd

我正在尝试解析此字段,但无法使其工作。目前的尝试:

HTML:

<div class="movie_data">
<dl>
    <dt><a href="http://www.imdb.com/title/tt1302011/">IMDB</a>:</dt>
    <dd>8.0 / 10</dd>
    <dt>Zvrst:</dt>
    <dd><a href="/sl/kino?t=&amp;g=1&amp;actual=1">komedija</a>, <a href="/sl/kino?t=&amp;g=14&amp;actual=1">animirani</a>, <a href="/sl/kino?t=&amp;g=21&amp;actual=1">družinski</a></dd> 
    <dt>Trajanje:</dt>
    <dd>90 min</dd>
</dl>
</div>

我的代码:

HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument htmlDocTusCelje = web.Load(my_link_to); 
HtmlAgilityPack.HtmlNode nodeOcena = htmlDocTusCelje.DocumentNode.SelectSingleNode("//div[@class='movie_data']/dt/dd[0]");
labelOcena.Text = nodeOcena.InnerText;

我只需要解析<dd>标记中的内部文字,但我得到一个例外:NullReferenceException, Object reference not set to an instance of an object

我尝试了SelectNodes和一个foreach循环 - 同样的故事。请帮我解决这个错误。

1 个答案:

答案 0 :(得分:2)

xpath有两个问题:

  1. 索引应该从1开始,而不是从0开始。
  2. 你写了dt而不是dl
  3. 如果xpath查询无法找到此类节点,则会返回null,这会在尝试使用nodeOcena时导致错误。

    这似乎有效:

    HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='movie_data']/dl/dd[1]");