Как выбрать тд, который имеет класс "foo"? - PullRequest
1 голос
/ 12 мая 2011

Я использую HtmlAgilityPack, и я хотел бы выбрать значение внутри тд с классом title. Мне нужно значение Battlefield 3, которое находится внутри тега <a>.

Я попробовал следующее, просто чтобы получить правильный элемент td, и я получил исключение object is not set to an instance.

var title = from item in document.DocumentNode.Descendants()
            where item.Name == "td" && item.Attributes["class"].Value == "title"
            select item.InnerHtml;

На этом небольшом примере я, вероятно, выясню остальное, что мне нужно.

Спасибо за предложения.

<tr class="first-in-year">
  <td class="year">2011</td>

  <td class="img"><a href="/battlefield-3/61-27006/"><img src=
  "http://media.giantbomb.com/uploads/6/63038/1700748-bf3_thumb.jpg" alt=""></a></td>

  <td class="title">
    <a href="/battlefield-3/61-27006/">Battlefield 3</a>

    <p class="deck">Battlefield 3 is DICE's next installment in the franchise and
    will be on PC, PS3 and Xbox 360. The game will feature jets, prone, a
    single-player and co-op campaign, and 64-player multiplayer (on PC). It's due out
    in Fall of 2011.</p>
  </td>
</tr>

Ответы [ 3 ]

4 голосов
/ 12 мая 2011

Попробуйте использовать селекторы XPath с указателями класса или других атрибутов.

//td[@class='title']/a

Он должен дать вам все элементы внутри элементов, которые имеют класс 'title'. Затем вы должны пройти через эту NodeCollection и вызвать свойство node.InnerText.

  var nodes = doc.DocumentNode.SelectNodes("//td[@class='title']/a");
  foreach(HtmlNode node in nodes)
  {
     string title = node.InnerText;
  }

Учебное пособие / ресурс на W3Schools очень хорошо подходит для быстрого наращивания.

0 голосов
/ 12 мая 2011

Это сработало для меня:

string title = doc.DocumentNode.SelectSingleNode(@"//td[@class='title']/a").InnerText;
0 голосов
/ 12 мая 2011

XPath должен сделать свое дело.Как-то так должно помочь:

var text = document.DocumentNode.SelectNodes("//td[@class='title']/a");
...