Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Работаем с XML правильно
- Хочу кратко описать как работать с XML в Битриксе правильно. Ибо не так давно (ну, для меня было неожиданностью по крайней мере) API для оного обновилось, и если раньше работали в лоб с массивом из XML, то сейчас для этого есть удобные инструменты.
- Итак,
- Предположим, что наше XML имеет такой вид:
- <?xml version="1.0" encoding="UTF-8"?><videos><video><id>36408325</id><title t1="test 1" t2="test2">One Game</title></video></videos>
- 1. Сначала нам надо подключить файл класса для работы с XML:
- require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/classes/general/xml.php');
- 2. Создаем объект класса:
- $xml = new CDataXML();
- 3. Загружаем в объект XML (который является строкой):
- $xml->LoadS tring($xml_string);
- И раньше мы использовали такую конструкцию, получая массив и работая уже с ним:
- $arData = $xml->GetArray();
- Сейчас же все стало значительно удобнее.
- Например, чтобы получить Title из XML выше, надо всего лишь сделать следующее:
- if ($node = $xml->SelectNodes('/videos/video/title')) {
- echo $node->textContent();
- }
- Если нода не была найдена, вернется false.
- Так можно получить все атрибуты:
- if ($node = $xml->SelectNodes('/videos/video/title')) {
- print_r($node->getAttributes());
- }
- Где каждый из ни будет объектом CDataXMLNode
- 1.jpg
- А вот так конкретный атрибут ноды:
- if ($node = $xml->SelectNodes('/videos/video/title')) {
- echo $node->getAttribute('t1');
- }
- Что еще. Допустим, у нас есть массив нодов, как обработать их. Дополним наш xml блоком:
- <pics>
- <pic>1</pic>
- <pic>2</pic>
- <pic>3</pic>
- </pics>
- Тогда, чтобы перебрать все pic, надо сделать так:
- if ($node = $xml->SelectNodes('/videos/video/pics')) {
- print_r($node->children());
- }
- Где каждый такой чилдрен будет объектом CDataXMLNode.
- Этого вполе достаточно для работы. Но более подробно изучить класс вы сможете по пути из п.1.
- Дополнение:
- 1. Если формат XML с двоеточиями (неймспейсы которые, хз как правильно его называть):
- <media:title></media:title>
- то перед парсингом, надо сделать следующее:
- $xml->delete_ns=false;
- Спасибо за совет техподдержке.
- 2. Можно использовать не LoadString, а Load, которой передать абсолютный путь до файла. Метод хорош тем, что автоматически вычленяет кодировку из XML-файла (encoding) и конвертит файл в кодировку сайта. Есть минус - если кодировки в файле не найдется, будет считать, что файл находится в windows-1251 кодировке.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement