2011-07-25 114 views
4

我有下表:http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat如何解析此表並從中提取數據?

這是一個貨幣兌換名單,我需要從中提取一些數據。在表的左邊是貨幣ID號碼。是否可以根據ID從指定的行中提取數據?

例如,從上面的表中,我想和標識978,203來提取貨幣,和348

輸出應爲:

  • EUR 104,2182
  • 捷克克朗4, 2747
  • HUF 38,7919

通過在類似的例子在這裏看着,我想出了這個:http://pastebin.com/hFZs1H7C

我需要以某種方式檢測ID和打印適當的值......我是noob當談到編程,我需要你的幫助。

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

       } 
} 

?> 

回答

3

您可以使用XPath和PHP的DOM文檔功能從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之中。

10

收集表的數據作爲陣列,用於以後使用:

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

大大大!!! 完美的作品,我添加了貨幣代碼的第二個數組,然後比較這兩個數組,並創建與花式國家圖標表:D – Desctruct

+3

@Destruct如果這對你有用,看看[如何接受答案工作?]( http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work);) – Yoshi

相關問題