Как я могу использовать HTML Agility Pack, чтобы получить первый абзац текста из тела HTML-файла. Я создаю инструмент представления ссылок в стиле DIGG и хочу получить заголовок и первый абзац текста. Название легко, любые предложения о том, как я могу получить первый абзац текста из тела? Я думаю, это может быть в пределах P или DIV в зависимости от страницы.
Этот html, который вы контролируете? Если это так, вы можете дать p идентификатору или классу и найти его через
//p[@id=\"YOUR ID\"] or //p[@class=\"YOUR CLASS\"]
EDIT: Поскольку вы не контролируете html, возможно, ниже будет работать. Он принимает все HtmlTextNodes и пытается найти группировку текста, превышающую указанный порог. Это далеко не идеально, но может заставить вас идти в правильном направлении.
String summary = FindSummary(page.DocumentNode);
private const int THRESHOLD = 50;
private String FindSummary(HtmlAgilityPack.HtmlNode node) {
foreach (HtmlAgilityPack.HtmlNode childNode in node.ChildNodes) {
if (childNode.GetType() == typeof(HtmlAgilityPack.HtmlTextNode)) {
if (childNode.InnerText.Length >= THRESHOLD) {
return childNode.InnerText;
}
}
String summary = FindSummary(childNode);
if (summary.Length >= THRESHOLD) {
return summary;
}
}
return String.Empty;
}
Пакет agility использует xpath для запроса загрузки html. Вы просто используете простой оператор xpath. Что-то вроде...
HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection firstParagraph = htmldoc.DocumentNode.SelectNodes("//p[1]");