【问题标题】:HTMLAgilityPack Selectnodes always returns nullHTMLAgilityPack Selectnodes 总是返回 null
【发布时间】:2016-09-15 21:04:02
【问题描述】:

我听说过关于 HTMLAgilityPack 库的好消息,所以我想尝试一下,但我使用它的成功率绝对为零。几个月来我一直试图弄清楚这一点。无论我做什么,我都无法让这段代码给我除了 null 之外的任何东西。我尝试按照这个示例 (http://www.c-sharpcorner.com/uploadfile/9b86d4/getting-started-with-html-agility-pack/),但没有得到相同的结果,我无法解释原因。

我尝试加载文件,然后运行 ​​SelectNodes 以选择所有超链接,但它总是返回一个空列表。我尝试选择各种节点(div、p、a、一切和任何东西),它总是返回一个空列表。我尝试过使用 doc.Descendants,我尝试过在本地和网络上使用不同的源文件,但我所做的任何事情都不会返回实际结果。

我一定忽略了一些重要的事情,但我无法弄清楚它是什么。我能错过什么?

代码:

    public string GetSource()
    {
        try
        {
            string result = "";

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            if (!System.IO.File.Exists("htmldoc.html"))
                throw new Exception("Unable to load doc");

            doc.LoadHtml("htmldoc.html");   // copied locally to bin folder, confirmed it found the file and loaded it

            HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a");  // Always returns null, regardless of what I put in here

            if (nodes != null)  
            {
                foreach (HtmlNode item in nodes)
                {
                    result += item.InnerText;
                }
            }
            else
            {
                // Every. Single. Time.
                throw new Exception("No matching nodes found in document");
            }


            return result;
        }
        catch (Exception ex)
        {                
            return ex.ToString();
        }
    }

我正在使用的源 HTML 文件“htmldoc.html”如下所示:

<html>  
<head>  
    <title>Testing HTML Agility Pack</title>
</head>  
<body>  
    <div id="div1">  
        <a href="div1-a1">Link 1 inside div1</a>  
        <a href="div1-a2">Link 2 inside div1</a>  
    </div>  
        <a href="a3">Link 3 outside all divs</a>      
        <div id="div2">  
        <a href="div2-a1">Link 1 inside div2</a>  
        <a href="div2-a2">Link 2 inside div2</a>  
    </div>  
</body>  
</html>

【问题讨论】:

    标签: c# html .net html-agility-pack


    【解决方案1】:

    要加载文件,您应该使用Load 方法。LoadHtml 用于包含 html 的字符串

    doc.Load("htmldoc.html"); 
    

    【讨论】:

      猜你喜欢
      • 2013-08-05
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2017-05-20
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多