Все больше и больше меня раздражают деятели которые любят лепить свои поделки. Я понимаю что не всегда есть документация, примеры и обсуждения на форуме. Хоть код и был уже показан в одном из постов, я хочу подробнее описать как работать с существующей библиотекой битрикса.
Первым делом хочу напомнить про функцию получения xml, с помощью нее можно обратится к любому url отдающему контент в этом формате.
QueryGetData();
Параметры это функции можно посмотреть в документации.
Итак пример, получаем текущее значение курсов валют в xml формате.
[source language=’php’]
$strQueryText = QueryGetData(
«www.cbr.ru»,
80,
«/scripts/XML_daily.asp»,
«»,
$error_number,
$error_text
);
[/source]
Если вывести переменную $strQueryText то вы увидите нечто подобное
036 AUD 1 Австралийский доллар 27,1304 826 GBP 1 Фунт стерлингов Соединенного королевства 48,6886 974 BYR 1000 Белорусских рублей 10,5395 208 DKK 10 Датских крон 58,3964 840 USD 1 Доллар США 30,1851 978 EUR 1 Евро 43,4605 352 ISK 100 Исландских крон 24,1259 398 KZT 100 Казахских тенге 20,3239 124 CAD 1 Канадский доллар 28,7559 156 CNY 10
но если посмотреть исходный код страницы то там будет четко виден xml документ, вида:
<valcurs date="01.01.2010" name="Foreign Currency Market"> <valute id="R01010"> <numcode>036</numcode> <charcode>AUD</charcode> <nominal>1</nominal> <name>Австралийский доллар</name> <value>27,1304</value></valute>
Вот теперь можно парсить. Подключаем сам скрипт require_once($_SERVER[«DOCUMENT_ROOT»].»/bitrix/modules/main/classes/general/xml.php»);
И все что нужно для счастья это 3 строчки кода
[source language=’php’]
$objXML = new CDataXML();
$objXML->LoadString($strQueryText);
$arData = $objXML->GetArray();
echo ‘
', print_r($arData).'
‘;
[/source]
В итоге мы получаем конечно не очень красивый но вполне понятный массив значений. Этот массив можно обработать и получить например вот такой массив с которым можно уже работать.
[source language=’php’]
$arResult = array();
foreach ($arData[‘ValCurs’][‘#’][‘Valute’] as $arValue)
{
$ar = array();
foreach ($arValue[‘#’] as $sKey => $sVal)
{
$ar[$sKey] = $sVal[0][‘#’];
}
$arResult[] = $ar;
}
echo ‘
', print_r($arResult).'
‘;
[/source]
После обработки получаем:
[0] => Array ( [NumCode] => 036 [CharCode] => AUD [Nominal] => 1 [Name] => Австралийский доллар [Value] => 27,1304 ) [1] => Array ( [NumCode] => 826 [CharCode] => GBP [Nominal] => 1 [Name] => Фунт стерлингов Соединенного королевства [Value] => 48,6886 )
И все, не нужно нечего больше придумывать, все в итоге сводится к работе с массивом. Надеюсь новичку будет полезно.
Ооо супер! Редко читаю какие то блоги, но тема битрикса привлекла и теперь читаю твои посты :) Как раз сегодня сел за написание программы телепередач для битрикса и вот работа с XML как нельзя очень кстати! Спасибо :)
эммм… а чем это лучше использования стандартных средств php?
ну т.е. file_get_contents и simpleXML ? Быстрее? Читабельнее? или что?
Нормуль
Пробовал на двух разных редакциях выполнить данный код, в результате одна и та же ошибка:
Fatal error: Call to a member function __toArray() on a non-object in/home/o/ololo/ololo.ru/public_html/bitrix/modules/main/classes/general/xml.php on line 370
В чем может быть проблема? :(
Происходит на строке:
$arData = $objXML->GetArray();
Для Национального банка Казахстана..на выходе такой же массив.
LoadString($strQueryText);
$arData = $objXML->GetArray();
?>
$sVal){
$ar[$sKey] = $sVal[0][‘#’];
}
$arResult[] = $ar;
}
?>
Для Национального банка Казахстана..на выходе такой же массив.
LoadString($strQueryText);
$arData = $objXML->GetArray();
?>
$sVal){
$ar[$sKey] = $sVal[0][‘#’];
}
$arResult[] = $ar;
}
?>
комменты не показываются полностью
DIsqus значит обрезает когда парсит, не показывает полностью код?