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

Все большее число web сервисов возвращает данные в формате JSON, но до сих пор огромное количество данных возвращается в формате XML.

Расширение PHP — SimpleXML, которое был введено еще в PHP 5.0, очень сильно упростило парсинг XML. Давайте посмотрим на сколько это просто.

ИСПОЛЬЗОВАНИЕ

Возмем небольшой XML файл:

<?xml version="1.0" encoding="utf-8"?>
<languages>
 <lang name="C">
  <appeared>1972</appeared>
  <creator>Dennis Ritchie</creator>
 </lang>
 <lang name="PHP">
  <appeared>1995</appeared>
  <creator>Rasmus Lerdorf</creator>
 </lang>
 <lang name="Java">
  <appeared>1995</appeared>
  <creator>James Gosling</creator>
 </lang>
</languages>

Данный файл описывает 3 языка программирования. У каждого языка есть свой автор (creator) и год разработки (appeared)

Первым делом загрузим наш .xml файл с помощью функции simplexml_load_file() или simplexml_load_string(). Далее к этому файлу мы будем обращаться через переменную $languages

<?php
$languages = simplexml_load_file("languages.xml");

Обе функции читают DOM дерево и возвращают SimpleXMLElement объект, который будет храниться в переменной $language.

Используя функцию var_dump() или print_r() мы получим подробную информацию о возвращенном объекте.

SimpleXMLElement Object
(
    [lang] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [name] => C
                        )
                    [appeared] => 1972
                    [creator] => Dennis Ritchie
                )
            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [name] => PHP
                        )
                    [appeared] => 1995
                    [creator] => Rasmus Lerdorf
                )
            [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [name] => Java
                        )
                    [appeared] => 1995
                    [creator] => James Gosling
                )
        )
)

В XML содержится три lang элемента, поэтому SimpleXMLElement состоит из массива 3-х элементов lang.

 

ОБРАЩЕНИЕ К ЭЛЕМЕНТАМ

Вы можете получить доступ к каждому элементу обычным путем, используя оператор ->.

Для примера: $language->lang[0] выдаст первый lang элемент. Элемент будет содержать 2 свойства: appeared и creator.

<?php
$languages->lang[0]->appeared;
$languages->lang[0]->creator;

С помощью цикла foreach можно пройти по всем языкам в документе. Для этого напишем код:

<?php
foreach ($languages->lang as $lang) {
    printf(
        "<p>%s appeared in %d and was created by %s.</p>",
        $lang["name"],
        $lang->appeared,
        $lang->creator
    );
}

Обратите внимание, что здесь используется запись:

$lang["name"]

С помощью таких записей мы можем обращаться к атрибутам элементов.

 

В данной статье приведена основная информация о работе с SimpleXML.

Более детально читайте здесь: 

 

Автор статьи: Alex. Категория: PHP
Дата публикации: 03.03.2013