Объединение таблиц HTML с помощью PHP DOMDocument

У меня есть целая куча больших HTML-документов с таблицами данных внутри, и я хочу написать скрипт, который может обрабатывать HTML-файл, изолировать теги и их содержимое, а затем объединять все строки в этих таблицах в одну большую таблицу данных. . Затем выполните цикл по строкам и столбцам новой большой таблицы.

После некоторых исследований я начал пробовать класс PHP DOMDocument для анализа HTML, но я просто хотел знать, это лучший способ сделать что-то подобное?

Это то, что у меня есть до сих пор ...

$dom = new DOMDocument();
$dom->preserveWhiteSpace = FALSE;
@$dom->loadHTMLFile('exrate.html');
$tables = $dom->getElementsByTagName('table');

Как вырезать все, кроме таблиц и их содержимого? Тогда я действительно хотел бы удалить первую таблицу, так как это оглавление. Затем переберите все строки таблицы и соберите их в одну большую таблицу.

У кого-нибудь есть подсказки, как это сделать? Я копался в документах для DOMDocument на php.net, но нахожу синтаксис довольно сбивающим с толку!

Привет, Б

РЕДАКТИРОВАТЬ: Вот пример файла HTML с таблицами данных, к которым я хотел бы присоединиться http://thenetzone.co.uk/exrates/exrate.html


person batfastad    schedule 04.02.2011    source источник
comment
Ну, DOMDocument ужасен. Попробуйте phpQuery или QueryPath или один из других лучших методов анализа HTML. Но мой второй совет — использовать один из самых простых классов регулярных выражений для извлечения строк из html-таблиц.   -  person mario    schedule 05.02.2011
comment
Можете ли вы вставить HTML-код ваших документов? & вместо DOMDocument парсер Php Simple HTML DOM может быть полезен для простого кодирования и проблем с производительностью. ссылка   -  person risyasin    schedule 05.02.2011
comment
Извините, я должен был указать, что файл HTML содержит несколько таблиц с одинаковыми столбцами и порядком столбцов, но разделенных кучей текстовых абзацев между каждой таблицей. Я взгляну на phpQuery, я рад, что я не единственный, кому сложно собрать DOMDocument, мне нравится идея использования phpQuery или QueryPath, которые являются обертками для DOMDocument. Здесь есть образец кода HTML... (thenetzone.co.uk/exrates/exrate .html)   -  person batfastad    schedule 05.02.2011


Ответы (1)


Хорошо, разобрался с помощью phpQuery и множества проб и ошибок.
Итак, он берет целую кучу таблиц и перемещает содержимое в первую, удаляя пустые таблицы.
Затем перебирает каждую строку таблицы и извлекает текст из определенных столбцов, в данном случае 2-й и 3-й тд каждой строки.

require('phpQuery/phpQuery.php');
$doc = phpQuery::newDocumentFileHTML('exrates_code.html');
pq('table:first')->remove();// REMOVE FIRST TABLE, JUST A CONTENTS TABLE SO NOT INTERESTED
pq('tr:has(th)')->remove();// REMOVE TABLE ROWS THAT ARE HEADERS
pq('table:not(:first) tr')->appendTo('table:first');// MOVE CONTENTS OF OTHER TABLES TO FIRST
pq('table:empty')->remove();// REMOVE EMPTY TABLES
pq('br')->remove();

$rows = pq('table tr');
foreach ($rows as $row) {
    $currency = pq($row)->find('td:eq(1)')->text();
    $value = pq($row)->find('td:eq(2)')->text();
}

Надеюсь, это поможет кому-то!

person batfastad    schedule 05.02.2011