如何使用HTML Agility Pack

我如何使用HTML Agility Pack?

我的XHTML文档不完全有效。 这就是我为什么要使用它的原因。 我如何在我的项目中使用它? 我的项目是在C#中。


首先,将HTMLAgilityPack nuget包安装到您的项目中。

然后,举个例子:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

// There are various options, set as needed
htmlDoc.OptionFixNestedTags=true;

// filePath is a path to a file containing the html
htmlDoc.Load(filePath);

// Use:  htmlDoc.LoadHtml(xmlString);  to load from a string (was htmlDoc.LoadXML(xmlString)

// ParseErrors is an ArrayList containing any errors from the Load statement
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
    // Handle any parse errors as required

}
else
{

    if (htmlDoc.DocumentNode != null)
    {
        HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

        if (bodyNode != null)
        {
            // Do something with bodyNode
        }
    }
}

(注意:此代码只是一个示例,不一定是最好/唯一的方法,不要在您的应用程序中盲目使用它。)

HtmlDocument.Load()方法也接受一个流,它在与.NET框架中的其他面向流的类集成时非常有用。 而HtmlEntity.DeEntitize()是正确处理html实体的另一种有用方法。 (感谢马修)

HtmlDocumentHtmlNode是你最HtmlNode的类。 与XML解析器类似,它提供了接受XPath表达式的selectSingleNode和selectNodes方法。

注意HtmlDocument.Option?????? 布尔属性。 这些控制LoadLoadXML方法如何处理HTML / XHTML。

还有一个名为HtmlAgilityPack.chm的编译的帮助文件,它具有每个对象的完整参考。 这通常位于解决方案的基础文件夹中。


我不知道这对你是否有任何帮助,但我写了几篇介绍基础知识的文章。

  • HtmlAgilityPack文章系列
  • HtmlAgilityPack图书馆简介
  • 使用HtmlAgilityPack轻松从html代码片段中提取链接
  • 下一篇文章完成了95%,我只需要写下我写的代码的最后几部分的解释。 如果你有兴趣,那么我会尽量记住我发布时在这里发布。


    HtmlAgilityPack使用XPath语法,尽管很多人认为它的记录不完善,但在使用此XPath文档的帮助下使用它并不困难:https://www.w3schools.com/xml/xpath_syntax.asp

    解析

    <h2>
      <a href="">Jack</a>
    </h2>
    <ul>
      <li class="tel">
        <a href="">81 75 53 60</a>
      </li>
    </ul>
    <h2>
      <a href="">Roy</a>
    </h2>
    <ul>
      <li class="tel">
        <a href="">44 52 16 87</a>
      </li>
    </ul>
    

    我这样做了:

    string url = "http://website.com";
    var Webget = new HtmlWeb();
    var doc = Webget.Load(url);
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a"))
    {
      names.Add(node.ChildNodes[0].InnerHtml);
    }
    foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//li[@class='tel']//a"))
    {
      phones.Add(node.ChildNodes[0].InnerHtml);
    }
    
    链接地址: http://www.djcxy.com/p/83345.html

    上一篇: How to use HTML Agility pack

    下一篇: Javascript: How to detect if browser window is scrolled to bottom?