Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Html agility pack

Ответить
Настройки темы
.NET - Html agility pack

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Цитировать


Подскажите почему не работает.Первый раз работаю со сторонними библиотеками посмотрел примеры, написал небольшую программу, но не работает.
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");
}
}

-------
rcnow.ru


Отправлено: 18:53, 31-08-2011

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Что значит "не работает"? Ошибки, значения переменных, результат где?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 10:58, 01-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Цитировать


Ругается на klo1 в цикле, мол ссылается на не существующий объект

-------
rcnow.ru


Отправлено: 17:59, 02-09-2011 | #3


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


DAmlex, давай весь проект в запакованном виде. + Ссылки на страницы загрузки компонентов.
Так же желательно инструкцию по получению ошибки.
Имеющиеся пространные рассуждения не спасают.
Цитата DAmlex:
Ругается на klo1 в цикле, мол ссылается на не существующий объект »
Банальный вопрос. А объект существует? Если да, то с какими параметрами?

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 18:54, 02-09-2011 | #4


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


добавьте в using HtmlAgilityPack

Отправлено: 19:59, 02-09-2011 | #5


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата ferget:
добавьте в using HtmlAgilityPack »
Если бы была ошибка из - за отсутствия ее в using, проект бы не откомпилировался даже...
Цитата DAmlex:
ссылается на не существующий объект »
В режиме отладки просто проверить какое "значение" у klo1, и уже будет понятнее...

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 10:39, 03-09-2011 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата LilLoco:
Если бы была ошибка из - за отсутствия ее в using, проект бы не откомпилировался даже... »
а почему вы решили, что проект откомпилировался?

Цитата DAmlex:
Ругается на klo1 в цикле, мол ссылается на не существующий объект »

Отправлено: 10:59, 03-09-2011 | #7


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата ferget:
а почему вы решили, что проект откомпилировался? »
Насколько я помню, такая ошибка появляется и при выполнении программы... Я так и подумал :-)

И тем более, когда не добавлено, в ошибке написано что, возможно нужно добавить.

Но правда, вот тут
Цитата DAmlex:
foreach (HtmlNode klo2 in klo1) »
непонятно HtmlNode берется из HtmlAgilityPack?
Тогда там явно не хватает библиотеки, как ferget Вы сказали.

DAmlex, Предоставьте больше информации...

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 12:23, 03-09-2011 | #8


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить 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)

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Последний раз редактировалось Delirium, 03-09-2011 в 14:16. Причина: ерунду написал в конце, удалил.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:00, 03-09-2011 | #9


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Html agility pack

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] В свойствах системы отображается 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




 
Переход