2011-02-04 10 views
0

大量のHTML文書を内部に持つテーブルがあり、HTMLファイルを処理してタグとその内容を分離し、すべてのそれらの表内の行を1つの大きなデータ表に変換します。 新しい大きなテーブルの行と列をループします。PHP DOMDocumentでHTMLテーブルを連結する

いくつかの調査の後、私はPHPのDOMDocumentクラスを試してHTMLを解析し始めましたが、私は知りたいと思っていました。これがこのようなことをする最善の方法ですか?

これは私がこれまで持っているものです...

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

はどのようにして、テーブルとその内容以外のすべてをチョップしますか? その後、目次であるため最初の表を削除したいと思います。次に、すべてのテーブル行をループし、1つの大きなテーブルに構築します。

どのようにこれを行うにはヒントがありますか? 私はphp.net上のDOMDocumentのドキュメントを掘り下げてきましたが、構文がわかりません!

乾杯、B

編集:ここで私は[OK]を、それがphpQueryと試行錯誤の多くとソートましhttp://thenetzone.co.uk/exrates/exrate.html

+0

DOMDocumentはひどいです。 phpQueryやQueryPath、または他の[HTMLを解析するための最善の方法](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html)を試してみてください。しかし、私の2番目の助言は、HTMLテーブルから行を抽出するために、よりシンプルなregexクラスの1つを使うことです。 – mario

+0

文書のHTMLコードを貼り付けることはできますか? &DOMDocumentの代わりに、PHPの単純なHTML DOMパーサーは、簡単なコーディングとパフォーマンスの問題に役立ちます。 [link](http://simplehtmldom.sourceforge.net/manual.htm) – risyasin

+0

申し訳ありませんが、HTMLファイルには、同じ列と列の順序を持​​つ複数の表が含まれていますが、各表の間にはテキスト段落が区切られています。私はphpQueryを見ていきますが、私はDOMDocumentをまとめるのが難しいだけでなく、DOMDocumentへのラッパーであるphpQueryやQueryPathを使うのが好きです。ここにHTMLコードのサンプルがあります...(http://thenetzone.co.uk/exrates/exrate.html) – batfastad

答えて

0

参加したいデータテーブルとHTMLファイルのサンプルがあります。
これで、テーブルが一杯になり、内容が最初のものに移動し、空のテーブルが削除されます。
次に、各テーブル行をループし、特定の列(この場合は各行の2番目と3番目のtd)からテキストを抽出します。

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(); 
}

これが誰かを助けてくれることを願っています!