2011-02-04 108 views
0

我有一大堆HTML文檔,裏面有數據表,我正在編寫一個腳本,它可以處理HTML文件,隔離標籤及其內容,然後連接所有這些表中的行放入一個大型數據表中。然後循環遍歷新大表的行和列。使用PHP連接HTML表格DOMDocument

經過一番研究,我開始嘗試PHP的DOMDocument類來解析HTML,但我只是想知道,這是做這種事情的最好方法嗎?

這是我這麼遠......

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

如何砍掉比表及其內容等一切嗎? 然後我真的想刪除第一個表,因爲它是一個目錄。然後循環遍歷所有錶行並將它們構建到一個大表中。

任何人有任何提示如何做到這一點? 我一直在深入研究php.net上的DOMDocument文檔,但是我發現語法非常令人困惑!

乾杯,B

編輯:這是我想加入http://thenetzone.co.uk/exrates/exrate.html

+0

那麼,DOMDocument是可怕的。嘗試phpQuery或QueryPath或其他[解析HTML的最佳方法](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html)。但我的第二個建議是使用一個更簡單的正則表達式類從html表中提取行。 – mario 2011-02-04 21:27:16

回答

0

確定了它排序與phpQuery和大量的試驗和錯誤的數據表的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(); 
}

希望這可以幫助別人!