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