2011-02-04 105 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(); 
}

希望这可以帮助别人!