descendant :: * works但是descendant :: th给出了错误

时间:2014-05-30 10:27:16

标签: c# html-agility-pack

我一直在尝试制作一些使用HtmlAgilityPack的简单程序。以下程序检测单词' Address'或者'电话'存在作为“内容”的内容。标签

我在Visual Studio 12中运行此程序。

如下所示的程序给出了错误

  

未处理的类型' System.NullReferenceException'发生在> StructureClassifier.exe

中      

附加信息:未将对象引用设置为对象的实例。

请注意,

            var cells = table.SelectNodes("descendant::th"); 

如果我用

替换这一行
            var cells = table.SelectNodes("descendant::*");

程序运行没有任何错误。

为什么下面的代码不起作用?

using HtmlAgilityPack;
class Program
{
    static void Main(string[] args)
    {
        HtmlWeb w = new HtmlWeb();
        HtmlDocument doc = w.Load("http://www.prouds.com.au/stores?state=WA")

        foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
        {
            var cells = table.SelectNodes("descendant::th"); // This returns error
            //It would work if I were to replace descendant::th to descendant::*
            Console.Write(cells.Count);
            Console.Write("\n");
            foreach (HtmlNode cell in cells)
            {
                string text = cell.InnerText;
                text = text.Trim();
                var equal = text.Equals("Address", StringComparison.OrdinalIgnoreCase);
                if (equal)
                {
                    Console.Write("Found Match\n");
                    Console.Write(text);
                    Console.Write("\n");
                }
                equal = text.Equals("Phone", StringComparison.OrdinalIgnoreCase);
                if (equal)
                {
                    Console.Write("Found Match\n");
                    Console.Write(text);
                    Console.Write("\n");
                }
            }
        }
    }
}

感谢。

0 个答案:

没有答案