2010-03-17 4 views
2

Мне нужна конвертация валюты, евро к доллару.
Европейский центральный банк предоставляет ставки здесь:
http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
я могу получить курс доллара США с помощью первого узла, но что, если они меняют порядок?
Нужно ли мне что-то более надежное? Я понятия не имею, как ..PHP simpleXML разбор

$xml = @simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'); 
echo "dollar: " . $xml->Cube->Cube->Cube[0]->attributes()->rate; 

ответ

6

Просто используйте XPath для получения любого узла с атрибутом @currency, равным «USD», который будет делать трюк.

$xref = simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'); 
$nodes = $xref->xpath('//*[@currency="USD"]'); 

echo $nodes[0]['rate']; 
0

Вы можете перебирать SimpleXml объекты с foreach

foreach($xml->Cube->Cube as $cube) { 
    if(isset($cube->attributes()->rate)) { 
     $rate = $cube->attributes()->rate; 
    }  
} 
2

Они обеспечивают пример кода на этой странице:

Просто нажмите вкладку Для разработчиков

Существует также (не сопровождается) PEAR Package for Exchange Rates

Вы не должны беспокоиться, если они меняют порядок. Если они это сделают, они это сделают.

0

Вы можете использовать XPath

$rate = $xml->xpath("//Cube[currency='USD']/rate") 
0

Вы правы. В настоящее время вы принимаете запись 0th как USD, и если заказ изменится в будущем, ваше предположение не удастся. Поэтому, чтобы ваше приложение не зависело от заказа, вы можете проверить атрибут currency в цикле. В тот момент, когда вы найдете значение со значением "USD", вы можете получить его соответствующий атрибут rate.