2013-07-03 3 views
0

Я сделал консольное приложение C#, которое должно отображать html-источник страницы.C# html просмотр с использованием html agility pack

Вместо этого консольное приложение показывает 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();   
    } 
} 
+0

Выход «HtmlAgilityPack.HtmlDocument» – ahamed

+2

Я не знаю модель HtmlDocument; но очевидно, что ToString() не реализован для возврата html. Вам нужно будет проверить свойства и использовать один из них, который должен содержать источник. – Nate

+1

posisble duplicate http://stackoverflow.com/questions/5599012/html-agility-pack-htmldocument-show-all-html – Liam

ответ

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();   
    } 
} 
2

Реализация по умолчанию .ToString() предназначена для вывода имени класса, которое вы видите. Таким образом, HtmlDocument из HtmlAgilityPack, очевидно, не обеспечивает производную реализацию.

От взгляда на code over on CodePlex, похоже, вам нужно использовать функцию Save, чтобы сохранить вывод в XmlWriter, а затем использовать его для получения строки. Я не вижу другого способа получить доступ ко всему содержимому страницы непосредственно из этого объекта (хотя, по общему признанию, я только что просмотрел его).

Редактировать: Амин Хаджусеф указал вам в правильном направлении с document.DocumentNode.Innerhtml, хотя учтите, что вам также нужно будет изменить тип возвращаемого значения функции.