Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2012, 00:39   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию XDocument. Разбор загруженного сайта

Всем доброго. Встала задача: Быстро скачать из некоего сайта все файлы с расширением XXX.
Предпологаю что .NET оснащен мошной системой разбора XML структуры (в часности хочу сделать упор на LINQ to XML)
Поскольку никогда не сталкивался в плотную с этим начал с начала:
Код:
            XDocument xd = XDocument.Load("http://www.сайт.ru/");
            var a= xd.Document.Elements("a");
            foreach (XElement xe in a) {
                Console.WriteLine(xe.Attribute("href"));
            }
Однако на методе Load получаю ошибку:
Цитата:
Недопустимый знак для указанной кодировки.
1) Что это означает? Как указать кодировку для этого компонента?
2) Правильно ли я начал? Может быть необходимо использовать другие методики для разбора сайта?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2012, 02:34   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Виталий, поделюсь опытом небольшим(правда я применял XmlDocument)
1)создавая свой StreamReader укажешь чт угодно
2)помни что не каждый XHTML соответствует стандарту.
а уж HTML не обязан быть корректным XML в принципе.

я лично обрезал нужную мне часть документа в ней правил ошибки не соответствующие XML, и потом через XPath доставал все что мне нужно.
но тут но в самой правке документа, не уютно это.

потому далее я буду применять(мне тот сайт еще много парсить) HTMLAgility.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2012, 11:06   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
HTMLAgility
Что за зверек?

P.S. А я то наивно полагал что HTML имеет структуру XML по всем правилам...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2012, 12:31   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://htmlagilitypack.codeplex.com/
набор классов который по функциональности почти как XmlDocument(по крайней мере XPath есть)
Цитата:
P.S. А я то наивно полагал что HTML имеет структуру XML по всем правилам...
я когда то тоже...
но http://validator.w3.org/check?uri=ht...Inline&group=0
мне было проще отрезать нужное и исправлять в нем.
(тогда не знал про HTMLAgility)
парсил это http://www.pwdatabase.com/ru/lvl/0-9 (заходя в каждого моба и переходя к след таблице)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2012, 12:41   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

XmlDocument - более удобный, но медленный
XmlTextReader - менее удобный, зато быстрый.
XPath - разбор.
_-Re@l-_ вне форума Ответить с цитированием
Старый 05.02.2012, 13:55   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

_-Re@l-_, если документ не являеться корректным xml то все это прахом.

и XmlDocument хороший класс.
а как я понимаю XmlTextReader это вообще ручное чтение с ручным разбором?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2012, 14:54   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
документ не являеться корректным xml
Увы в моей ситуации я не могу такое гарантировать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2012, 14:59   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я лично применял ту самую HTMLAgility вместо XmlDocument, код не сильно отличаеться.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2012, 15:02   #9
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
а как я понимаю XmlTextReader это вообще ручное чтение с ручным разбором?
ну почти да.
а насчёт корректности - средства .NET также позволяют проверить xml на корректность, используя классы XmlSchemaSet и XmlReaderSettings.
Цитата:
и XmlDocument хороший класс.
хороший, но при больших объёмах очень медленный.
_-Re@l-_ вне форума Ответить с цитированием
Старый 05.02.2012, 15:05   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
а насчёт корректности - средства .NET также позволяют проверить xml на корректность, используя классы XmlSchemaSet и XmlReaderSettings.
а толку мне проверять его на корректность?
мне загрузить надо то что есть.
Цитата:
хороший, но при больших объёмах очень медленный.
естественно построить дерево медленнее чем не строить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие файла, предварительно загруженного в файл ресурсов Win32 приложения alexandersson Win Api 1 16.04.2011 21:54
md5 загруженного изображения bulldog5293 Общие вопросы Delphi 2 10.03.2011 21:57
Cохранить картинку с сайта загруженного в WebBrowser компонент Terikon Работа с сетью в Delphi 1 22.11.2010 02:50
Как узнать разрешение изображения *.bmp, загруженного в TBitmap? ImmortalAlexSan Мультимедиа в Delphi 2 22.07.2010 17:03
Сохранение загруженного в TImage изображения в папку с программой Torymo Помощь студентам 1 06.02.2009 03:41