HTML Parsing?

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

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

Ответить
SomeBody
новенький
Сообщения: 12
Зарегистрирован: 21.03.2013 19:45:09

HTML Parsing?

Сообщение SomeBody »

Доброго времени суток форумчане...
Вопрошаю о помощи =)
Работал ли кто то с fpc-xml и конкретно с DOM_HTML?
Мучаюсь уже не первый день с "нормальным" парсингом таблиц и последующим их преобразованием в массив и выводом в StringGrid.
(в силу своей pascal-ьной малограмотности было дело опустился до сохранения результатов из Synapse в документы и последующей передачей в скриптовые языки типа AutoIt... а там уже IECreate и пошло поехало...)
Как я понял нормальной документации по fpc-xml не будет ещё долго... а Clever Internet Suite, DIHtmlParser и тому подобное в Lazarus собственноручно не впихнуть... (что весьма печально)
По сему было бы приятно почитать или лицезреть чьи либо наработки в парсинге html-страниц и конкретно многоуровневых таблиц с последующим преобразованием в массивы данных...
Буду признателен за любые примерные поучения и наставления на путь истинный...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Обработай html утилитой типа htmltidy, чтобы превратить в xml, потом уже xml разбирай с помощью fcl-xml.
SomeBody
новенький
Сообщения: 12
Зарегистрирован: 21.03.2013 19:45:09

Сообщение SomeBody »

Вы знаете Сережа.. полез я читать про 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.. и потом с ними работать...

Может подскажите или Вы или ещё кто то кто пробовал таким способом обратиться к ячейкам таблицы?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

TDOMNodeList индексируется от 0 до (count-1), поэтому в приведенном примере htmtables.item[3] вернет nil, а не последнюю таблицу.
С учетом этого, каких-то хитростей нет, GetElementsByTagName('tr') вернет список строк и т.д.
SomeBody
новенький
Сообщения: 12
Зарегистрирован: 21.03.2013 19:45:09

Сообщение SomeBody »

Сережа большое Вам спасибо за указание на ошибку.. разобрался с вытаскиванием в TDomNodeList..
Ответить