Справка по утилизации html Agility Pack

c# html-agility-pack

Вопрос

Я пытаюсь очистить некоторую информацию с веб-сайта, но не могу найти решение, которое работает для меня. Каждый код, который я читаю в Интернете, создает для меня хотя бы одну ошибку.

Даже пример кода на их домашней странице порождает ошибки для меня.

Мой код:

         HtmlDocument doc = new HtmlDocument();
         doc.Load("https://www.flashback.org/u479804");
         foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
         {
            HtmlAttribute att = link["href"];
            att.Value = FixLink(att);
         }
         doc.Save("file.htm");

Создает следующую ошибку:

«HtmlDocument» - это двусмысленная ссылка между «System.Windows.Forms.HtmlDocument» и «HtmlAgilityPack.HtmlDocument» C: * \ Form1.cs

Изменить: Весь мой код находится здесь: http://beta.yapaste.com/55

Вся помощь очень ценится!

Принятый ответ

Используйте HtmlAgilityPack.HtmlDocument :

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

Компилятор запутывается, потому что два пространства имен, которые вы импортировали с using содержат классы под названием HtmlDocument - пространство имен HTML Agility Pack и пространство имен Windows Forms. Вы можете обойти это, указав, какой класс вы хотите использовать явно.


Популярные ответы

так я и достиг. Обратите внимание, что в главном примере Html Agility Pack приведена ошибка кода в строке foreach doc.DocumentElement.SelectNodes ("// a [@href"]). Ниже приведен правильный и проверенный.

 HtmlWeb hw = new HtmlWeb();

    HtmlDocument doc = hw.Load(@"http://tipscow.com");
    StringBuilder sb = new StringBuilder();

    List<string> lstHref = new List<string>();

    foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]").Distinct())
    {
        string curHref = link.Attributes["href"].Value;

        if(!lstHref.Contains(curHref))
        lstHref.Add(curHref);

    }
    foreach (string str in lstHref)
    {
        sb.Append(str +"<br />");
    }

    Response.Write (sb.ToString());

Поскольку он работал для меня, я думал, что должен поделиться.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему