Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Html agility pack (http://forum.oszone.net/showthread.php?t=214512)

DAmlex 31-08-2011 18:53 1743453

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

Delirium 01-09-2011 10:58 1743885

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

DAmlex 02-09-2011 17:59 1744861

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

lxa85 02-09-2011 18:54 1744888

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

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

Банальный вопрос. А объект существует? Если да, то с какими параметрами?

ferget 02-09-2011 19:59 1744926

добавьте в using HtmlAgilityPack

LilLoco 03-09-2011 10:39 1745168

Цитата:

Цитата ferget
добавьте в using HtmlAgilityPack »

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

Цитата DAmlex
ссылается на не существующий объект »

В режиме отладки просто проверить какое "значение" у klo1, и уже будет понятнее...

ferget 03-09-2011 10:59 1745174

Цитата:

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

а почему вы решили, что проект откомпилировался?

Цитата:

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


LilLoco 03-09-2011 12:23 1745201

Цитата:

Цитата ferget
а почему вы решили, что проект откомпилировался? »

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

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

Но правда, вот тут
Цитата:

Цитата DAmlex
foreach (HtmlNode klo2 in klo1) »

непонятно HtmlNode берется из HtmlAgilityPack?
Тогда там явно не хватает библиотеки, как ferget Вы сказали.

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

Delirium 03-09-2011 14:00 1745254

Не надо везде пихать var, используй точные типы данных.
Насколько я помню, DocumentNode.SelectNodes("//title") вернет коллекцию узлов, и именно этот тип и надо указывать типом переменной. Узнать тип можно наведением мыши на функцию SelectNodes, высветится возвращаемый ею тип.

А вообще по результатам поиска в гугле есть много интересного на эту тему. В частности, обсуждается вопрос, почему возвращается Null а не пустая коллекция, есть даже целый форум , посвященный этой библиотеке.

Чуть не забыл. Не компилируется потому, скорее всего, что в C# тип данных var вычисляется немного отлично от обычных типов. пруфлинк - http://msdn.microsoft.com/ru-ru/library/bb383973.aspx
Если уж так охота иметь "пространственную переменную", дай ей тип object, это даст гарантию, что не возникнет исключений и данную переменную можно будет впоследствии привести к любому нужному типу. Для этого в цикле надо будет добавить приведение типа примерно так
foreach ((HtmlNode klo2 in (HtmlNodeCollection)klo1)

Завернин Дмитрий 12-07-2013 11:48 2183556

Все гораздо проще я думаю.
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");
}


Время: 09:51.

Время: 09:51.
© OSzone.net 2001-