Перетворення xml в json на php

основи XML

XML - це стандарт для розміток. Заснована на XML розмітка використовується для опису даних, які подаються за допомогою тегів, які не обов'язково повинні бути визначені заздалегідь. XML дуже добре розширюємо, оскільки можна створювати нові теги в міру необхідності. У лістингу 1 показаний приклад структури даних, представлених в XML-форматі.

Лістинг 1. Простий приклад XML-даних

основи JSON

Лістинг 2. Простий приклад JSON-даних

Обробка даних на стороні браузера

Лістинг 3. Фрагмент коду для обробки даних в JSON-форматі, отриманих від сервера

Перетворення XML-в-JSON

Все більша кількість додатків потребує перетворення XML-даних в JSON. Кілька Web-сервісів, що виконують такі перетворення, вже з'явилися. IBM T.J. Watson Research Center розробив особливий метод, який використовує PHP для конвертування валюти. Цей метод приймає XML-дані на вході і перетворює їх в JSON-формат на виході. Таке PHP-рішення забезпечує декілька переваг:

  • Його можна запускати в автономному режимі, з командного рядка.
  • Його можна включити в існуючий код, що виконується на стороні сервера.
  • Його можна легко розмістити як Web-сервіс в Web.

Перетворення XML-в-JSON вимагає використання двох базових функціональних можливостей PHP:

Використовуючи тільки ці дві базові функціональні можливості PHP, можна перетворити будь-які довільні XML-дані в JSON-формат. Перш за все, потрібно перетворити XML-вміст у відповідну PHP-тип даних, використовуючи SimpleXMLElement. Потім PHP-дані надаються в кодировщик Services_JSON. який, в свою чергу, формує остаточний висновок даних в JSON-форматі.

Освоєння PHP-коду

Дана реалізація xml2json складається з трьох частин:

  • xml2json.php - PHP-клас з двома статичними функціями.
  • xml2json_test.php - Тестовий драйвер для роботи з функцією перетворення xml2json.
  • test1.xml, test2.xml, test3.xml, test4.xml - XML-файли різної складності.

У лістингу 4 визначаються деякі корисні константи. Перший рядок коду імпортує реалізацію Services_JSON.

Лістинг 4. Визначення констант в xml2json.php

Фрагмент коду, наведений у лістингу 5. являє собою вхідну функцію в перетворювач xml2json. Вона приймає в якості вхідного параметра XML-дані і перетворює XML-рядок в об'єкт SimpleXMLElement. який передається в іншу функцію (рекурсивно) в даному класі. Ця функція перетворює XML-елементи в асоціативний PHP-масив. Даний масив потім передається в якості вхідного параметра в кодировщик Services_JSON. який видає дані в JSON-форматі.

Лістинг 5. Використання Services_JSON в xml2json.php

Довгий фрагмент коду, наведений у лістингу 6. ​​використовує методологію рекурсії, розроблену PHP-спільнотою прихильників відкритого коду (див. Розділ "Ресурси"). Він приймає об'єкт SimpleXMLElement в якості вхідного параметра і рекурсивно проходить по вкладеному XML-дереву. Він зберігає всі виявлені XML-елементи в асоціативному PHP-масиві. Ви можете налаштувати граничну глибину рекурсії, змінивши константу, певну в лістингу 4.

Лістинг 6. Логіка перетворення в xml2json.php

Реалізація тестового драйвера для xml2json

Фрагмент коду, наведений у лістингу 7. являє собою тестовий драйвер, який застосовує логіку перетворення xml2json.

Лістинг 7. xml2json_test.php

Ви можете виконати програму з командного рядка з ім'ям XML-файла, зазначеним як аргумент командного рядка:

При виконанні з командного рядка програма читає XML-вміст з файлу в строкову змінну. Потім вона викликає статичну функцію в класі xml2json для отримання результату в JSON-форматі. Крім виконання програми з командного рядка ви можете змінити логіку в цьому вихідному файлі для надання перетворювача xml2json у вигляді викликається Web-сервісу, що використовує протоколи доступу Simple Object Access Protocol (SOAP) або Representational State Transfer (REST). При необхідності можна легко зробити це в PHP з мінімальними витратами.

У лістингу 8 наведено один з чотирьох тестових XML-файлів, що поставляються до статті для тестування реалізації xml2json. Ступінь складності цих файлів різна. Ви можете передати один з цих файлів у вигляді аргументу командного рядка в тестовий драйвер xml2json_test.php.

Лістинг 8. Тестування реалізації xml2json з test2.xml

Фрагмент коду, наведений у лістингу 9. являє собою результат в форматі JSON при використанні файлу test2.xml як аргумент командного рядка для тестового драйвера xml2json_test.php.

Лістинг 9. Результат в JSON-форматі для test2.xml

висновок

Ви можете використовувати вихідний код, що поставляється з цією статтею, в різних цілях - як автономну програму, як бібліотеку класів для існуючої програми, що виконується на стороні сервера, або як функцію Web-сервісу SOAP / REST для участі у корпоративній сервіс-орієнтованої архітектури (Service -Oriented Architecture - SOA).

Ресурси для скачування

Схожі теми

Схожі статті