【问题标题】:How to parse this table and extract data from it?如何解析该表并从中提取数据?
【发布时间】:2011-10-12 16:45:16
【问题描述】:

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

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

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

输出应该是:

  • 104,2182 欧元
  • 4,2747 捷克克朗
  • 匈牙利福林 38,7919

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

我需要以某种方式检测 ID 和打印正确的值...在编程方面我是菜鸟,我需要你的帮助。

<?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;

                }
}

?>

【问题讨论】:

    标签: php


    【解决方案1】:

    将表格数据收集为数组以备后用:

    $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']
        );
    }
    

    【讨论】:

    • 很棒很棒很棒!!!效果很好,我添加了第二个带有货币代码的数组,然后比较这两个数组并使用精美的国家图标创建表格:D
    • @Destruct 如果这对您有用,请查看How does accepting an answer work? ;)
    【解决方案2】:

    您可以使用 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多