Как извлечь текст из HTML, используя htmlagilitypack для этого примера? - PullRequest
3 голосов
/ 03 мая 2011

Я хочу извлечь текст из источника 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 из таблицы?

Ответы [ 2 ]

7 голосов
/ 03 мая 2011
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml("web page string");
var xyz = from x in htmlDoc.DocumentNode.DescendantNodes()
                     where x.Name == "td" && x.Attributes.Contains("class")
                     where x.Attributes["class"].Value == "title"
                     select x.InnerText;

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

3 голосов
/ 07 мая 2011

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 result;
 foreach (HtmlNode item in nodes) 
       result += item.InnerText;

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

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