Доброго времени суток форумчане...
Вопрошаю о помощи =)
Работал ли кто то с fpc-xml и конкретно с DOM_HTML?
Мучаюсь уже не первый день с "нормальным" парсингом таблиц и последующим их преобразованием в массив и выводом в StringGrid.
(в силу своей pascal-ьной малограмотности было дело опустился до сохранения результатов из Synapse в документы и последующей передачей в скриптовые языки типа AutoIt... а там уже IECreate и пошло поехало...)
Как я понял нормальной документации по fpc-xml не будет ещё долго... а Clever Internet Suite, DIHtmlParser и тому подобное в Lazarus собственноручно не впихнуть... (что весьма печально)
По сему было бы приятно почитать или лицезреть чьи либо наработки в парсинге html-страниц и конкретно многоуровневых таблиц с последующим преобразованием в массивы данных...
Буду признателен за любые примерные поучения и наставления на путь истинный...
HTML Parsing?
Модератор: Модераторы
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Обработай html утилитой типа htmltidy, чтобы превратить в xml, потом уже xml разбирай с помощью fcl-xml.
Вы знаете Сережа.. полез я читать про tidy по вашей рекомендации.. выяснил что у меня данные с сайта приходят уже в XHTML-е и нет надобности извращаться..
на данном этапе я делаю так..
пытаюсь передать
но дальше получить доступ к ChildNodes не получается а тут как раз и начинается работа с <th>, <td> и <tr>...
вот мне бы как то получить все элементы таблицы в виде TNodeList.. и потом с ними работать...
Может подскажите или Вы или ещё кто то кто пробовал таким способом обратиться к ячейкам таблицы?
на данном этапе я делаю так..
Код: Выделить всё
...
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
- Откуда: Зеленоград
TDOMNodeList индексируется от 0 до (count-1), поэтому в приведенном примере htmtables.item[3] вернет nil, а не последнюю таблицу.
С учетом этого, каких-то хитростей нет, GetElementsByTagName('tr') вернет список строк и т.д.
С учетом этого, каких-то хитростей нет, GetElementsByTagName('tr') вернет список строк и т.д.
Сережа большое Вам спасибо за указание на ошибку.. разобрался с вытаскиванием в TDomNodeList..
