PHP. Работа с данными в XML формате.

В этой статье я расскажу как работать с XML данными в PHP. На данный момент XML формат часто используется в разного рода информерах (погода, курсы валют и т.д), в API различных сайтов и много где ещё.  В своём примере я покажу как получить курс валют из XML с сайта Центрального банка России.
Для обработки XML воспользуемся встроенным в PHP классом — SimplexmlElement.

А вот так выглядит XML файл который мы будем обрабатывать(в примере приведена только часть файла):

<ValCurs Date="04/10/2011" name="Foreign Currency Market"><Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>31,4288</Value>
</Valute>
<Valute ID="R01020A">
<NumCode>944</NumCode>
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>41,4671</Value>
</Valute>
<Valute ID="R01035">
<NumCode>826</NumCode>
<CharCode>GBP</CharCode>
<Nominal>1</Nominal>
<Name>Фунт стерлингов Соединенного королевства</Name>
<Value>50,6368</Value>
</Valute>
<Valute ID="R01060">
<NumCode>051</NumCode>
<CharCode>AMD</CharCode>
<Nominal>1000</Nominal>
<Name>Армянских драмов</Name>
<Value>87,1364</Value>
</Valute>

SimplexmlElement — преобразует XML файл в массив, с которым можно будет делать всё, что нам нужно.

Пример 1 (Выведем все данные о курсах валюты из файла)

<?php
 
$requestAddress = "https://www.cbr.ru/scripts/XML_daily.asp?date_req=04/10/2011"; // адрес xml файла с курсами валют
 
$xml_str = file_get_contents($requestAddress,0);
 
$xml = new SimplexmlElement($xml_str);
 
 
foreach($xml->Valute as $item){
	echo $item->NumCode." ".$item->CharCode." ".$item->Nominal." ".$item->Name." ".$item->Value;
	echo '<br>';
	}
 
?>

Полученный результат:

036 AUD 1 Австралийский доллар 31,4288
944 AZN 1 Азербайджанский манат 41,4671
826 GBP 1 Фунт стерлингов Соединенного королевства 50,6368
051 AMD 1000 Армянских драмов 87,1364
974 BYR 10000 Белорусских рублей 57,7819

… и т.д.

Пример 2 (Выведем только данные о конкретной валюте)

<?php
 
$requestAddress = "https://www.cbr.ru/scripts/XML_daily.asp?date_req=04/10/2011"; // адрес xml файла с курсами валют
 
$xml_str = file_get_contents($requestAddress,0);
 
$xml = new SimplexmlElement($xml_str);
 
$tmp1 = $xml->Valute[2]->NumCode; // [2] - получаем данные только с указанным индексом элемента массива 
$tmp2 = $xml->Valute[2]->CharCode;
$tmp3 = $xml->Valute[2]->Nominal;
$tmp4 = $xml->Valute[2]->Name;
$tmp5 = $xml->Valute[2]->Value;
 
echo $tmp1." ".$tmp2." ".$tmp3." ".$tmp4." ".$tmp5;
 
?>

Полученный результат:

826 GBP 1 Фунт стерлингов Соединенного королевства 50,6368

Добавить комментарий