|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Html agility pack |
|
.NET - Html agility pack
|
Новый участник Сообщения: 13 |
Подскажите почему не работает.Первый раз работаю со сторонними библиотеками посмотрел примеры, написал небольшую программу, но не работает.
HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument(); html.LoadHtml("нужный сайт"); var klo1 = html.DocumentNode.SelectNodes("//title"); if (klo1 != null) { / foreach (HtmlNode klo2 in klo1) { html.Save("result.html"); } } |
|
------- Отправлено: 18:53, 31-08-2011 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Что значит "не работает"? Ошибки, значения переменных, результат где?
|
------- Отправлено: 10:58, 01-09-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 13
|
Ругается на klo1 в цикле, мол ссылается на не существующий объект
|
------- Отправлено: 17:59, 02-09-2011 | #3 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать DAmlex, давай весь проект в запакованном виде. + Ссылки на страницы загрузки компонентов.
Так же желательно инструкцию по получению ошибки. Имеющиеся пространные рассуждения не спасают. Цитата DAmlex:
|
|
------- Отправлено: 18:54, 02-09-2011 | #4 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать добавьте в using HtmlAgilityPack
|
|
Отправлено: 19:59, 02-09-2011 | #5 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 10:39, 03-09-2011 | #6 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:59, 03-09-2011 | #7 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Цитата ferget:
И тем более, когда не добавлено, в ошибке написано что, возможно нужно добавить. Но правда, вот тут Цитата DAmlex:
Тогда там явно не хватает библиотеки, как ferget Вы сказали. DAmlex, Предоставьте больше информации... |
||
------- Отправлено: 12:23, 03-09-2011 | #8 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Не надо везде пихать var, используй точные типы данных.
Насколько я помню, DocumentNode.SelectNodes("//title") вернет коллекцию узлов, и именно этот тип и надо указывать типом переменной. Узнать тип можно наведением мыши на функцию SelectNodes, высветится возвращаемый ею тип. А вообще по результатам поиска в гугле есть много интересного на эту тему. В частности, обсуждается вопрос, почему возвращается Null а не пустая коллекция, есть даже целый форум , посвященный этой библиотеке. Чуть не забыл. Не компилируется потому, скорее всего, что в C# тип данных var вычисляется немного отлично от обычных типов. пруфлинк - http://msdn.microsoft.com/ru-ru/library/bb383973.aspx Если уж так охота иметь "пространственную переменную", дай ей тип object, это даст гарантию, что не возникнет исключений и данную переменную можно будет впоследствии привести к любому нужному типу. Для этого в цикле надо будет добавить приведение типа примерно так foreach ((HtmlNode klo2 in (HtmlNodeCollection)klo1) |
------- Последний раз редактировалось Delirium, 03-09-2011 в 14:16. Причина: ерунду написал в конце, удалил. Отправлено: 14:00, 03-09-2011 | #9 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Все гораздо проще я думаю.
var klo1 = html.DocumentNode.SelectNodes("title"); //Слеши излишни, они не входят в название тэга, сам проверял. //Дальше код будет работать логически неправильно, ибо вы проходите все заголовки по всем title и каждый раз сохраняете один и тот же html в один и тот же файл, хотя заголовков title может быть несколько в коллекции klo1. Если же только один заголовок title может быть, то конструкция foreach не имеет смысла. И если честно не понимаю в чем смысл программы. Если вы хотите сохранить html код всей страницы сайта, то зачем вообще нужна история с поиском title? Если же вы хотите сохранить именно сами html элементы title, то сохранять нужно сами элементы а не всю страницу в переменной html. Надеюсь, что изложил свои мысли доступно и не излишне размазано ![]() foreach (HtmlNode klo2 in klo1) { html.Save("result.html"); } |
Отправлено: 11:48, 12-07-2013 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] В свойствах системы отображается Service Pack 2/Service Pack 3 | Blast | Microsoft Windows 7 | 64 | 14-09-2012 18:19 | |
OCZ представила три новых SSD линейки Agility 3 | OSZone News | Новости железа | 0 | 07-05-2011 12:30 | |
Service Pack 1 и 2 | SIM | Microsoft Windows 2000/XP | 42 | 19-06-2003 02:47 | |
Service Pack 3 | vot | Microsoft Windows NT/2000/2003 | 16 | 21-02-2003 22:09 | |
Service Pack | via | Microsoft Windows 2000/XP | 10 | 05-11-2002 10:58 |
|