Как извлечь текст из HTML с помощью htmlagilitypack для этого примера?

#c# #linq #xpath #html-agility-pack #html-content-extraction

#c# #linq #xpath #html-agility-pack #извлечение html-содержимого

Вопрос:

Я хочу извлечь текст из источника HTML. Я пытаюсь использовать c # и htmlagilitypack dll.

Источник:

 <table>
  <tr>
    <td class="title">
      <a onclick="func1">Here 2</a>
    </td>
    <td class="arrow">
      <img src="src1" width="9" height="8" alt="Down">
    </td>
    <td class="percent">
      <span>39%</span>
    </td>
    <td class="title">
      <a onclick="func2">Here 1</a>
    </td>
    <td class="arrow">
      <img src="func3" width="9" height="8" alt="Up">
    </td>
    <td class="percent">
      <span>263%</span>
    </td>
  </tr>
</table>
  

Как я могу получить текст здесь 1 и здесь 2 из таблицы?

Ответ №1:

 HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml("web page string");
var xyz = from x in htmlDoc.DocumentNode.DescendantNodes()
                     where x.Name == "td" amp;amp; x.Attributes.Contains("class")
                     where x.Attributes["class"].Value == "title"
                     select x.InnerText;
  

не так красиво, но должно сработать

Ответ №2:

Версия Xpath

  HtmlDocument doc = new HtmlDocument();
 doc.LoadHtml(t);

 //this simply works because InnerText is iterative for all child nodes
 HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//td[@class='title']");
//but to be more accurate you can use the next line instead
//HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//td[@class='title']/a");


 string resu<
 foreach (HtmlNode item in nodes) 
       result  = item.InnerText;
  

а для версии LINQ просто измените строку var Nodes = .. на:

  var Nodes = from x in htmlDoc.DocumentNode.DescendantNodes()
                  where x.Name == "td" amp;amp; x.Attributes["class"].Value == "title"
                  select x.InnerText;
  

Комментарии:

1. как отобразить текст ячейки?

2. используйте innerText или вы можете использовать text() в xpath вот так «//td[@class=’title’]/a/text()»