2015-01-13 2 views
1

я не могу найти решение на официальных документах, так вот мой сценарий:PHP: разбор данных из формата XML Cube

Мне нужно, чтобы разобрать данные из этого XML: http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml

Это код я не внедрил до сих пор:

$xml=simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml'); 
foreach($xml->Cube->Cube as $x) { 
    $arr[date('d-m',strtotime($x['time']))] = array(); 
    foreach($xml->Cube->Cube->Cube as $y) { 
     $arr[(string)$y['currency']] = (float)$y['rate']; 
    }; 
}; 

Проблема заключается в том, что этот код будет, очевидно, разбирает только первый набор ставка, а мне нужно разобрать каждые ставки, установленные для каждой даты, то мне нужно изменить $xml->Cube->Cube->Cube с чем-то иначе я не знаю, как объявить! Может быть только синтаксисом вопрос тогда ...

UPDATE

Я почти там:

foreach($xml->Cube->Cube as $x) { 
    for ($i=0;$i<90;$i++) { 
     foreach($xml->Cube->Cube[$i]->Cube as $y) { 
       $arr[date('d-m',strtotime($x['time']))][(string)$y['currency']] = (float)$y['rate']; 
     } 
    } 
} 

Проблема здесь находится на линии № 3: foreach не будет принимать переменную $i и он возвращает Invalid argument supplied for foreach(). Если я использую один индекс istead переменной (например, 0 или 1), он будет работать. Итак, теперь проблема заключается в том, как динамически увеличивать индекс! :(

+0

, что об использовании XSLT запроса – philipp

+0

@philipp я никогда не использовал этот метод, не могли бы вы сделать практический пример? Я читал здесь [(w3schools.com)] (http://www.w3schools.com/xpath/xpath_syntax.asp), но мне не совсем понятно, как применить его к этому случаю – Mariano

+1

' // Cube/Cube/Cube' или '// Cube [@currency и @rate]' возвращает список всех '' Элементов, которые вы желаете ... Чтобы запустить запрос на простой xml, вы должны посмотреть здесь: http: //php.net/manual/de/simplexmlelement.xpath.php – philipp

ответ

1

Ну, там была маленькая хитрость, с помощью пространств имен, но это код:

<?php 
    $xml = simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml'); 
    $xml->registerXPathNamespace('d', 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref'); 
    $list = $xml->xpath('//d:Cube[@currency and @rate]'); 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>xpath</title> 
    </head> 
    <body> 
     <table> 
      <tr> 
       <th>id</th> 
       <th>currency</th> 
       <th>rate</th> 
      </tr> 

      <?php $count = 0; ?> 
      <?php foreach ($list as $cube): ?> 
      <?php $attrs = $cube->attributes(); ?> 
      <tr> 
       <td><?php echo ++$count; ?></td> 
       <td><?php echo $attrs['currency']; ?></td> 
       <td><?php echo $attrs['rate']; ?></td> 
      </tr> 
      <?php endforeach; ?> 

     </table> 
    </body> 
</html> 
+0

Спасибо, ваш код работает ... нет, я «только» должен узнать, как построить массив ... – Mariano

Смежные вопросы