2012-11-18 70 views
2

我有一种方法可以提取超过XX个单词的文本块。问题是它不会返回该文本内的链接。Htmlagilitypack - 获取文本中的所有文本+链接

我的方法:

public string getAllTextHTML(string _html) 
{ 
    string _allText = ""; 
    try 
    { 
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
    document.LoadHtml(_html); 

    document.DocumentNode.Descendants() 
     .Where(n => n.Name == "script" || n.Name == "style") 
     .ToList() 
     .ForEach(n => n.Remove()); 

    RemoveComments(document.DocumentNode); 

    var root = document.DocumentNode; 
    var sb = new StringBuilder(); 
    foreach (var node in root.DescendantNodesAndSelf()) 
    { 
     if (!node.HasChildNodes) 
     { 
     string text = node.InnerHtml; 

     if (!string.IsNullOrEmpty(text)) 
     { 
      int antalOrd = WordCounting.CountWords1(text); 

      if (antalOrd > 25) 
      { 
      text = System.Web.HttpUtility.HtmlDecode(text); 
      sb.AppendLine(text.Trim()); 
      } 
     } 
     } 
    } 

    _allText = sb.ToString(); 
    } 
    catch (Exception) 
    { 
    } 

    _allText = System.Web.HttpUtility.HtmlDecode(_allText); 
    return _allText; 
} 

我如何才能让这也让我的文本中的链接?

+0

您可以发布HTML的例子吗? –

+0

我希望它可以在任何html页面上工作:/ – Jacqueline

回答

1

我想,下面的行做了一个问题:

if (!node.HasChildNodes) 

,因为链接(锚)是HTLM标签和您排除具有锚标记为子html标签。

下面是简单的例子,返回链接:

String html = "<p>asdf<a href='#'>Test</a>asdfasd</p>"; 

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(html); 

String p = (from x in doc.DocumentNode.Descendants() 
      where x.Name == "p" 
      select x.InnerHtml).FirstOrDefault();