PHP

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

На днях я начал перерабатывать свою систему внутренней отчётности фирмы, об общем устройстве которой писал не так давно. Не кривя душой, скажу, что вырос над собой в плане PHP, и, как следствие, понял, что алгоритм системы достаточно кривой для того, чтобы я его переписал.

До этого XML-документ парсился с помощью функций, которые заимствованы из PHP 4-й версии. Однако PHP5 подарил миру очень удобную вещь под названием SimpleXML. О том, как же с ним работать, и пойдёт речь сегодня.

Стоит начать с того, что SimpleXML — это отдельный подключаемый модуль, а потому его надо заранее подключить на используемом сервере.

Теперь мы можем работать!

Для того, чтобы обработать документ, используем функцию simplexml_load_file(). В качестве параметра ей передается адрес файла в формате eXtended Markup Language (XML — Ваш К.О.).

Прелесть данной функции в том, что ей совершенно спокойно можно передать файл с любого сервера. Таким образом, у нас появляется возможность обрабатывать внешние xml-выгрузки (к примеру, Яндекс-XML или сторонние RSS-ленты).

На выходе функция выдает массив. Подводный камень, с которым столкнулся я, в том, что XML может иметь корявую структуру, а потому советую для начала провести образную трассировку и вывести массив, чтобы понять, как же функция его обработала. После этого можно приступать к обработке полученных данных.

Для примера я возьму простенькую конструкцию отсюда:
[cc lang=»XML»]



PHP: Появление Парсера


Ms. Coder
Onlivia Actora


Mr. Coder
El ActÓr

Mr. ParserJohn Doe
Таким образом, это язык. Это все равно язык программирования. Или
это скриптовый язык? Все раскрывается в этом документальном фильме,
похожем на фильм ужасов.
PHP решает все мои задачи в web
7
5
PG


[/cc]

Пусть это будет файл export.xml, который лежит прямо в корне моего сервера вместе с обрабатывающим его скриптом.
Массив строится в соответствии со структурой DOM-элементов в XML-документе. Обработка начинается от корня. Для того, чтобы получить имя Ms. Coder, мы должны выстроить следующий путь: $xml->movies->movie->characters->character[0]->name.
Обращаю внимание, что мы выбираем конкретное значение. Отсюда и берется запись такого рода character[0] — не забываем, что мы работаем с массивом!

Как и любой массив, наши данные можно обработать при помощи цикла foreach. Код будет такой:
[cc lang=»PHP»]
$xml = simplexml_load_file(‘export.xml’);//выгрузили файл
$ttl = $xml->movies->movie->title; //получили заголовок. он один, так что [0] или другое значение ставить не надо

foreach ($xml->movies->movie->caracters as $crc) // а теперь поработаем в динамике
{
//выведем имена героев
$name = $crc->caracter->name;
echo («$name
«);
}
[/cc]

Такой код положит в переменную $ttl текст «PHP: Появление Парсера», а затем выведет построчно на экран имена героев
Ms. Coder, Mr. Coder, Mr. Parser.

Принимайте на вооружение и усложняйте!

Безошибочного Вам кода!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *