如何解析此表并从中提取数据?

时间:2011-07-25 15:19:13

标签: php

我有下表:http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat

这是一个货币兑换清单,我需要从中提取一些数据。表格的左侧是货币ID号码。是否可以根据其ID从指定行提取数据?

例如,从上表中,我想提取ID为978,203和348的货币。

输出应为:

  • EUR 104,2182
  • CZK 4,2747
  • HUF 38,7919

通过查看此处的类似示例,我想出了这个:http://pastebin.com/hFZs1H7C

我需要以某种方式检测身份证和打印适当的值...我在编程方面很棒,我需要你的帮助。

<?php
$data = file_get_contents('http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat');

$dom = new domDocument;

@$dom->loadHTML($data);
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName('table');

$rows = $tables->item(1)->getElementsByTagName('tr');

foreach ($rows as $row) {
        $cols = $row->getElementsByTagName('td');
                foreach ($cols as $col) {

                                echo $col;

                }
}

?>

2 个答案:

答案 0 :(得分:12)

将表数据收集为数组以供以后使用:

$dom = new DomDocument;
$dom->loadHtmlFile('http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat');

$xpath = new DomXPath($dom);

// collect header names
$headerNames = array();
foreach ($xpath->query('//table[@id="index:srednjiKursLista"]//th') as $node) {
    $headerNames[] = $node->nodeValue;
}

// collect data
$data = array();
foreach ($xpath->query('//tbody[@id="index:srednjiKursLista:tbody_element"]/tr') as $node) {
    $rowData = array();
    foreach ($xpath->query('td', $node) as $cell) {
        $rowData[] = $cell->nodeValue;
    }

    $data[] = array_combine($headerNames, $rowData);
}

print_r($data);

<强>输出

Array
(
    [0] => Array
        (
            [ŠIFRA VALUTE] => 978
            [NAZIV ZEMLJE] => EMU
            [OZNAKA VALUTE] => EUR
            [VAŽI ZA] => 1
            [SREDNJI KURS] => 104,2182
        )

    ...
)

使用示例:

foreach ($data as $entry) {
    printf(
        '%s %s' . PHP_EOL,
        $entry['OZNAKA VALUTE'],
        $entry['SREDNJI KURS']
    );
}

答案 1 :(得分:3)

您可以使用PHP的xpath和domdocument功能从html(或xml)中提取特定数据。

$src = new DOMDocument('1.0', 'utf-8');
$src->formatOutput = true;
$src->preserveWhiteSpace = false;
$content = file_get_contents("http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat");
@$src->loadHTML($content);
$xpath = new DOMXPath($src);
$values=$xpath->query('//td[ contains (@class, "tableCell") ]');
foreach($values as $value)
{
echo $value->nodeValue."<br />";
}

这将使用class =“tableCell”打印每个td元素的innerHTML。