0

我制作了一个控制台 c# 应用程序,它应该显示页面的 html 源代码。

相反,控制台应用程序显示HtmlAgilityPack.HtmlDocument.

谁能向我解释为什么会这样?

class Program
{
    public HtmlDocument read()
    {
        HtmlWeb htmlWeb = new HtmlWeb();
        try
        {
            HtmlAgilityPack.HtmlDocument document = htmlWeb.Load("http://www.yahoo.com");
            return document;
        }
        catch (Exception e)
        {
            Console.WriteLine("Error : " + e.ToString());
            return null;     
        }
    }     

    static void Main(string[] args)
    {
        Program dis = new Program();
        string text = Convert.ToString(dis.read());
        Console.WriteLine(text);
        Console.ReadLine();        
    }
}
4

2 回答 2

3

代替

 return document;

和:

 return document.DocumentNode.InnerHtml;

或者如果您只想提取文本(没有 HTML 标签):

 return document.DocumentNode.InnerText;

整个代码将是:

class Program
{
    public string read()
    {
        HtmlWeb htmlWeb = new HtmlWeb();
        try
        {
            HtmlAgilityPack.HtmlDocument document = htmlWeb.Load("http://www.yahoo.com");
            return document.DocumentNode.InnerHtml;
        }
        catch (Exception e)
        {
            Console.WriteLine("Error : " + e.ToString());
            return null;     
        }
    }     

    static void Main(string[] args)
    {
        Program dis = new Program();
        string text = dis.read();
        Console.WriteLine(text);
        Console.ReadLine();        
    }
}
于 2013-07-03T15:33:56.183 回答
2

的默认实现.ToString()只是输出类的名称,这就是您所看到的。所以HtmlDocument从 HtmlAgilityPack 显然不提供派生的实现。

通过查看 CodePlex上的代码,您似乎需要使用该Save函数将输出保存到 anXmlWriter然后使用它来获取字符串。我没有看到另一种直接从该对象获取页面全部内容的方法(尽管我承认我只是扫描了它)。

编辑:Amine Hajyoussef 用 为您指明了正确的方向document.DocumentNode.Innerhtml,但请注意,您还需要更改函数的返回类型。

于 2013-07-03T15:34:05.933 回答