У цій замітці описано, як розпарсити xml-рядок, перетворити її в json-об'єкт або асоціативний масив і отримати потрібні дані
Завдання: є xml-рядок. Потрібно розпарсити цей рядок і витягнути з неї всі дані. Приклад xml-рядки списку товарів
Перетворимо xml-рядок в json-рядок
Далі у нас 2 варіанти, можна перетворити рядок в об'єкт json, а можна в асоціативний масив. Перетворення виконує функція json_decode ($ json_string [, true]). За замовчуванням отримаємо об'єкт, але якщо другий параметр встановити в true, то рядок перетвориться в асоціативний масив. На мій погляд, працювати з json-об'єктом зручніше, але це справа смаку. Розглянемо обидва варіанти
Працюємо з об'єктом
Для перевірки наявності у вузлі params потрібних властивостей використовуємо функцію isset (). Зверніть увагу на роботу з фото. $ Good-> photos-> photo отримає різний результат для першого і другого товару. У першому товар у нас 2 вузла photo, і ми отримаємо їх масив. У другому випадку вузол один, і при цьому повертається об'єкт. Щоб нам не доводилося вводити умови, як отримувати інформацію, перебором масиву або прямим доступом до полів об'єкта, ми перевіряємо, чи є отримана змінна масивом, і якщо немає, "заганяємо" її в масив штучно. У підсумку ми завжди отримуємо масив з одним або декількома об'єктами, які обробляємо звичайним перебором.
Працюємо з масивом
Принцип роботи такий самий, тільки звертаємося ми не до полів об'єкта, а до значень масиву. Перевірка вузла photos проходить трохи інакше. Код $ photos = $ good [ 'photos'] [ 'photo'] отримає в будь-якому випадку масив, тільки потрібно визначити, чи є він асоціативним. Відповідна перевірка підглянена у фреймворку Kohana