Полный цикл в digital

Десериализация в XML

Для десериализации (декодирование) перевод XML в объект PHP можно использовать PHP-функцию SimpleXMLElement(). В переменной $xml хранится объект с разобранным XML. Обращаясь к свойствам этого объекта можно получать доступ с содержимому тегов XML:

$str = "<?xml version='1.0'?>
<worker>
<name>Коля</name>
<age>25</age>
<salary>1000</salary>
</worker>";
$xml = new SimpleXMLElement($str);
var_dump($xml);  // { ["name"]=> string(8) "Коля" ["age"]=> string(2) "25" ["salary"]=> string(4) "1000" }

Если XML хранится в файле или отдается по обращению к URL, то следует использовать функцию simplexml_load_file, которая делает тот же объект из xml:

$xml = simplexml_load_file(путь_к_файлу_или_урл);

Из объекта xml в нормальный массив

Если неудобно работать с объектом xml, можно преобразовать его в нормальный массив PHP с помощью следующего хитрого приема:

<?
$xml = simplexml_load_file(путь_к_файлу_или_урл);
var_dump(json_decode(json_encode($xml), true));

Приемы работы

Дан следующий XML:

<?xml version='1.0'?>
<worker>
<name>Коля</name>
<age>25</age>
<salary>1000</salary>
</worker>

Получим имя, возраст, зарплату работника:

<?
$xml = simplexml_load_file(путь_к_файлу_или_урл);
echo $xml->name; // выведет 'Коля'
echo $xml->age; // выведет 25
echo $xml->salary; // выведет 1000

Работа с атрибутами

Данные хранятся в атрибутах:

<?xml version='1.0'?>
<root>
<worker name="Коля" age="25" salary="1000">Номер 1</worker>
</root>
<?
$xml = simplexml_load_file(путь_к_файлу_или_урл);
echo $xml->worker['name']; // выведет 'Коля'
echo $xml->worker['age']; // выведет 25
echo $xml->worker['salary']; // выведет 1000
echo $xml->worker;  // выведет 'Номер 1'

Теги с дефисами

В XML разрешены теги и атрибуты с дефисом. В этом случае обращение к таким тегам происходит так:

<?xml version='1.0'?>
<root>
<worker>
<first-name>Коля</first-name>
<last-name>Иванов</last-name>
</worker>
</root>
<?
$xml = simplexml_load_file(путь_к_файлу_или_урл);
echo $xml->worker->{first-name}; // выведет 'Коля'
echo $xml->worker->{last-name}; // выведет 'Иванов'

Перебор циклом

Мы можем перебрать наш объект с помощью цикла foreach:

<?xml version='1.0'?>
<workers>
<worker>
<name>Коля</name>
<age>25</age>
<salary>1000</salary>
</worker>
<worker>
<name>Вася</name>
<age>26</age>
<salary>2000</salary>
</worker>
<worker>
<name>Петя</name>
<age>27</age>
<salary>3000</salary>
</worker>
</workers>
<?
$xml = simplexml_load_file(путь к файлу или урл);
foreach ($xml as $worker) {
echo $worker->name; // выведет 'Коля', 'Вася', 'Петя'
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг