Wie würde ich das HTML Agility Pack verwenden, um den ersten Absatz eines Textes aus dem Body einer HTML-Datei zu erhalten? Ich baue ein Link-Einreichungstool im Stil von DIGG und möchte den Titel und den ersten Absatz des Textes erhalten. Der Titel ist einfach, habt ihr Vorschläge, wie ich den ersten Absatz des Textes aus dem Body erhalten könnte? Ich vermute, es könnte sich innerhalb eines P oder DIV befinden, je nach Seite.
Antworten
Zu viele Anzeigen?Handelst du dieses HTML? Wenn ja, könntest du dem p eine ID oder eine Klasse zuweisen und es über
//p[@id=\"YOUR ID\"] oder //p[@class=\"YOUR CLASS\"]
Bearbeiten: Da du das HTML nicht kontrollierst, könnte das Folgende funktionieren. Es nimmt alle HtmlTextNodes und versucht, eine Gruppierung von Text zu finden, die größer als der angegebene Schwellenwert ist. Es ist weit entfernt von perfekt, könnte dich aber in die richtige Richtung bringen.
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;
}
Sheff
Punkte
3425
Das Agility-Pack verwendet xpath zum Abfragen des HTML-Loads, den Sie gerade verwenden. Verwenden Sie einfach eine einfache xpath-Anweisung. Etwas wie...
HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection firstParagraph = htmldoc.DocumentNode.SelectNodes("//p[1]");