XML парсер в массив на PHP

XML

По идее столько всего понаписано, чего огород то городить? От случая к случаю, конечно, пользуюсь библиотеками PHP. Но вместе с этим, есть объективные причины ими  пользоваться не всегда. Далее покажу совсем крохотный класс-конвертер XML в массив на базе xml_parser.

После парсинга данным классом получаем древовидный массив.

Вот пример HTML кода, который мы будет парсить:

В нем есть несколько разных тегов, а также инлайн строка — «ааа».

Парсим с помощью SimpleXML

Получаем SimpleXMLElement объект вида:

Т.е на выходе какая то мешанина из объектов и массивов, теги группируются в массивы, инлайн данные вообще потеряны.

Теперь тоже самое парсим моей самоделкой.

Результат вот такой:

Т.е. получаем иерархический массив тегов, атрибуты перечисляются как хеш-массив, теги — как нумерованный массив. Я также делал вариант, когда дочерние элементы группировались в xeш — childs (переделать не сложно).

Класс для преобразования XML в массив

А теперь, код класса — в студию :)

Использование myXMLparser

В классе используется только одна public функция и та является static. Обернул в класс только для того, чтобы не засорять пространство имен и обернуть 3 функции. Используется так:

Написать комментарий

Мало букафф? Читайте есчо !

Если simplexml "не парсит" атрибуты...

Август 12, 2017 г.

.. то скорее всего, вы ошибаетесь. Рассмотрим следующий пример XML. В документе example.xml содержится запись о валюте и информация о категории товара. Обе записи содержат аттрибуты. [crayon-5ae19600a5c16829375092/] Выполним чтение и вывод информации ...

Читать

Вариант XML карты сайта для Drupal 7

Ноябрь 8, 2016 г.

Сначала написал вариант для Drupal 6, но в силу актуальности семерки, предлагаю вариант кода для 7й версии. Описание вы найдете в прошлой статье, здесь обновлена только работа с базой данных. Привожу код класса и пример его вызова. Код класса: ...

Читать

 

Комментарии к «XML парсер в массив на PHP»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “XML парсер в массив на PHP”

  1. Джигурда:

    Попробуй

    $xml = simplexml_load_string(‘xml-код’);
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);

    echo «

    »;

  2. Alex:

    Хороший скрипт, только ошибка в нем, в 32 сроке, блин столько времени на это потратил.
    Вместо
    if (isset($v[‘attributes’])) $data += $v[‘attributes’];
    Нужно делать или:
    if (isset($v[‘attributes’])) $j[‘attributes’] = $v[‘attributes’];
    Или:
    if (isset($v[‘attributes’])) $j += $v[‘attributes’];
    Иначе часть информации теряется!!!