XML парсер битрикса [bitrix api]

Все больше и больше меня раздражают деятели которые любят лепить свои поделки. Я понимаю что не всегда есть документация, примеры и обсуждения на форуме. Хоть код и был уже показан в одном из постов, я хочу подробнее описать как работать с существующей библиотекой битрикса.

Первым делом хочу напомнить про функцию получения 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
        )

И все, не нужно нечего больше придумывать, все в итоге сводится к работе с массивом.  Надеюсь новичку будет полезно.

8 thoughts on “XML парсер битрикса [bitrix api]

  1. Ооо супер! Редко читаю какие то блоги, но тема битрикса привлекла и теперь читаю твои посты :) Как раз сегодня сел за написание программы телепередач для битрикса и вот работа с XML как нельзя очень кстати! Спасибо :)

  2. эммм… а чем это лучше использования стандартных средств php?
    ну т.е. file_get_contents и simpleXML ? Быстрее? Читабельнее? или что?

  3. Пробовал на двух разных редакциях выполнить данный код, в результате одна и та же ошибка:

    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();

  4. Для Национального банка Казахстана..на выходе такой же массив.

     

     LoadString($strQueryText);
    $arData = $objXML->GetArray();
    ?>
    $sVal){
    $ar[$sKey] = $sVal[0][‘#’];
    }
    $arResult[] = $ar;
    }
    ?>

  5. Для Национального банка Казахстана..на выходе такой же массив.

     

     LoadString($strQueryText);
    $arData = $objXML->GetArray();
    ?>
    $sVal){
    $ar[$sKey] = $sVal[0][‘#’];
    }
    $arResult[] = $ar;
    }
    ?>

  6. комменты не показываются полностью

  7. DIsqus значит обрезает когда парсит, не показывает полностью код?

Comments are closed.