Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Итак,
Предположим, что наше XML имеет такой вид:
1. Сначала нам надо подключить файл класса для работы с XML:
2. Создаем объект класса:
3. Загружаем в объект XML (который является строкой):
И раньше мы использовали такую конструкцию, получая массив и работая уже с ним:
Сейчас же все стало значительно удобнее.
Например, чтобы получить Title из XML выше, надо всего лишь сделать следующее:
Если нода не была найдена, вернется false.
Так можно получить все атрибуты:
Где каждый из ни будет объектом CDataXMLNode
А вот так конкретный атрибут ноды:
Что еще. Допустим, у нас есть массив нодов, как обработать их. Дополним наш xml блоком:
Тогда, чтобы перебрать все pic, надо сделать так:
Где каждый такой чилдрен будет объектом CDataXMLNode.
Этого вполе достаточно для работы. Но более подробно изучить класс вы сможете по пути из п.1.
Дополнение:
1. Если формат XML с двоеточиями (неймспейсы которые, хз как правильно его называть):
то перед парсингом, надо сделать следующее:
Спасибо за совет техподдержке.
2. Можно использовать не LoadString, а Load, которой передать абсолютный путь до файла. Метод хорош тем, что автоматически вычленяет кодировку из XML-файла (encoding) и конвертит файл в кодировку сайта. Есть минус - если кодировки в файле не найдется, будет считать, что файл находится в windows-1251 кодировке.
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Работаем с 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(); |
$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
А вот так конкретный атрибут ноды:
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 кодировке.
Назад в раздел
Подписаться на новые материалы раздела: