C # Html Agility Pack проблема синтаксического анализа тэгов dd и dt - PullRequest
2 голосов
/ 11 июня 2011

Я пытаюсь разобрать это поле, но не могу заставить его работать.Текущая попытка:

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 Ответ

2 голосов
/ 11 июня 2011

У вас две проблемы с вашим xpath:

  1. Индекс должен быть основан на 1, а не на 0.
  2. Вы написали dt вместо dl.

Если запрос xpath не может найти такие узлы, он возвращает null, что приводит к вашей ошибке при попытке использовать nodeOcena.

Это работает:

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