HTML Parsing?

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

HTML Parsing?

Сообщение SomeBody » 21.03.2013 20:09:51

Доброго времени суток форумчане...
Вопрошаю о помощи =)
Работал ли кто то с fpc-xml и конкретно с DOM_HTML?
Мучаюсь уже не первый день с "нормальным" парсингом таблиц и последующим их преобразованием в массив и выводом в StringGrid.
(в силу своей pascal-ьной малограмотности было дело опустился до сохранения результатов из Synapse в документы и последующей передачей в скриптовые языки типа AutoIt... а там уже IECreate и пошло поехало...)
Как я понял нормальной документации по fpc-xml не будет ещё долго... а Clever Internet Suite, DIHtmlParser и тому подобное в Lazarus собственноручно не впихнуть... (что весьма печально)
По сему было бы приятно почитать или лицезреть чьи либо наработки в парсинге html-страниц и конкретно многоуровневых таблиц с последующим преобразованием в массивы данных...
Буду признателен за любые примерные поучения и наставления на путь истинный...
SomeBody
новенький
 
Сообщения: 12
Зарегистрирован: 21.03.2013 19:45:09

Re: HTML Parsing?

Сообщение Sergei I. Gorelkin » 21.03.2013 23:02:08

Обработай html утилитой типа htmltidy, чтобы превратить в xml, потом уже xml разбирай с помощью fcl-xml.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: HTML Parsing?

Сообщение SomeBody » 23.03.2013 11:38:05

Вы знаете Сережа.. полез я читать про tidy по вашей рекомендации.. выяснил что у меня данные с сайта приходят уже в XHTML-е и нет надобности извращаться..
на данном этапе я делаю так..
Код: Выделить всё
...
var
  HTMTable : TDOMNode;
  HTMTables : TDOMNodeList;
...
  ReadHTMLFile(HTMDoc,MyFile);     // Потом можно будет сразу обрабатывать через поток минуя сохранение файла на диске..
  HTMTables:=HTMDoc.DocumentElement.GetElementsByTagName('table');       
// проверяю HTMLTables.Count выдает 3

пытаюсь передать
Код: Выделить всё
HtmTable:=Htmtables.Item[3];

но дальше получить доступ к ChildNodes не получается а тут как раз и начинается работа с <th>, <td> и <tr>...
вот мне бы как то получить все элементы таблицы в виде TNodeList.. и потом с ними работать...

Может подскажите или Вы или ещё кто то кто пробовал таким способом обратиться к ячейкам таблицы?
SomeBody
новенький
 
Сообщения: 12
Зарегистрирован: 21.03.2013 19:45:09

Re: HTML Parsing?

Сообщение Sergei I. Gorelkin » 23.03.2013 13:50:23

TDOMNodeList индексируется от 0 до (count-1), поэтому в приведенном примере htmtables.item[3] вернет nil, а не последнюю таблицу.
С учетом этого, каких-то хитростей нет, GetElementsByTagName('tr') вернет список строк и т.д.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: HTML Parsing?

Сообщение SomeBody » 23.03.2013 15:05:12

Сережа большое Вам спасибо за указание на ошибку.. разобрался с вытаскиванием в TDomNodeList..
SomeBody
новенький
 
Сообщения: 12
Зарегистрирован: 21.03.2013 19:45:09


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru