2009-11-23 50 views
2

如何使用HTML Agility Pack從HTML文件正文獲取文本的第一段。我正在構建一個DIGG風格的鏈接提交工具,並希望獲得標題和文本的第一段。標題很簡單,對於我如何從身體中獲得第一段文字有什麼建議?我想這可能在P或DIV內,具體取決於頁面。HTML Agility Pack - 獲取頁面摘要

回答

3

是你控制的這個html嗎?如果是這樣,你可以給P上的ID或類,並通過

//p[@id=\"YOUR ID\"] or //p[@class=\"YOUR CLASS\"] 

編輯發現: 既然你不控件的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; 
} 
+0

我不控制HTML,用戶可以提交他們喜歡的任何頁面,所以我不知道容器的ID或類將是什麼 – reach4thelasers 2009-11-23 17:24:01

+0

謝謝!那就是我一直在尋找的! – reach4thelasers 2009-11-25 21:21:48

0

敏捷包使用xpath查詢html負載,您只需使用簡單的xpath語句。像...

HtmlDocument htmldoc = new HtmlDocument(); 
htmldoc.LoadHtml(content); 

HtmlNodeCollection firstParagraph = htmldoc.DocumentNode.SelectNodes("//p[1]");