#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()»