Показать полную графическую версию : 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
Что значит "не работает"? Ошибки, значения переменных, результат где?
Ругается на klo1 в цикле, мол ссылается на не существующий объект
DAmlex, давай весь проект в запакованном виде. + Ссылки на страницы загрузки компонентов.
Так же желательно инструкцию по получению ошибки.
Имеющиеся пространные рассуждения не спасают.
Ругается на klo1 в цикле, мол ссылается на не существующий объект »
Банальный вопрос. А объект существует? Если да, то с какими параметрами?
добавьте в using HtmlAgilityPack
добавьте в using HtmlAgilityPack »
Если бы была ошибка из - за отсутствия ее в using, проект бы не откомпилировался даже...
ссылается на не существующий объект »
В режиме отладки просто проверить какое "значение" у klo1, и уже будет понятнее...
Если бы была ошибка из - за отсутствия ее в using, проект бы не откомпилировался даже... »
а почему вы решили, что проект откомпилировался?
Ругается на klo1 в цикле, мол ссылается на не существующий объект »
а почему вы решили, что проект откомпилировался? »
Насколько я помню, такая ошибка появляется и при выполнении программы... Я так и подумал :-)
И тем более, когда не добавлено, в ошибке написано что, возможно нужно добавить.
Но правда, вот тут
foreach (HtmlNode klo2 in klo1) »
непонятно HtmlNode берется из HtmlAgilityPack?
Тогда там явно не хватает библиотеки, как ferget Вы сказали.
DAmlex, Предоставьте больше информации...
Delirium
03-09-2011, 14:00
Не надо везде пихать var, используй точные типы данных.
Насколько я помню, DocumentNode.SelectNodes("//title") вернет коллекцию узлов, и именно этот тип и надо указывать типом переменной. Узнать тип можно наведением мыши на функцию SelectNodes, высветится возвращаемый ею тип.
А вообще по результатам поиска (http://www.google.ru/#sclient=psy&hl=ru&newwindow=1&site=&source=hp&q=DocumentNode.SelectNodes&pbx=1&oq=DocumentNode.SelectNodes&aq=f&aqi=&aql=&gs_sm=e&gs_upl=0l0l0l931l0l0l0l0l0l0l0l0ll0l0&bav=on.2,or.r_gc.r_pw.&fp=6d29e03d3da2ab71&biw=1600&bih=779) в гугле есть много интересного на эту тему. В частности, обсуждается вопрос, почему возвращается Null а не пустая коллекция, есть даже целый форум (http://htmlagilitypack.codeplex.com/discussions) , посвященный этой библиотеке.
Чуть не забыл. Не компилируется потому, скорее всего, что в C# тип данных var вычисляется немного отлично от обычных типов. пруфлинк - http://msdn.microsoft.com/ru-ru/library/bb383973.aspx
Если уж так охота иметь "пространственную переменную", дай ей тип object, это даст гарантию, что не возникнет исключений и данную переменную можно будет впоследствии привести к любому нужному типу. Для этого в цикле надо будет добавить приведение типа примерно так
foreach ((HtmlNode klo2 in (HtmlNodeCollection)klo1)
Завернин Дмитрий
12-07-2013, 11:48
Все гораздо проще я думаю.
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");
}
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.