На днях я начал перерабатывать свою систему внутренней отчётности фирмы, об общем устройстве которой писал не так давно. Не кривя душой, скажу, что вырос над собой в плане PHP, и, как следствие, понял, что алгоритм системы достаточно кривой для того, чтобы я его переписал.
До этого XML-документ парсился с помощью функций, которые заимствованы из PHP 4-й версии. Однако PHP5 подарил миру очень удобную вещь под названием SimpleXML. О том, как же с ним работать, и пойдёт речь сегодня.
Стоит начать с того, что SimpleXML — это отдельный подключаемый модуль, а потому его надо заранее подключить на используемом сервере.
Теперь мы можем работать!
Для того, чтобы обработать документ, используем функцию simplexml_load_file(). В качестве параметра ей передается адрес файла в формате eXtended Markup Language (XML — Ваш К.О.).
Прелесть данной функции в том, что ей совершенно спокойно можно передать файл с любого сервера. Таким образом, у нас появляется возможность обрабатывать внешние xml-выгрузки (к примеру, Яндекс-XML или сторонние RSS-ленты).
На выходе функция выдает массив. Подводный камень, с которым столкнулся я, в том, что XML может иметь корявую структуру, а потому советую для начала провести образную трассировку и вывести массив, чтобы понять, как же функция его обработала. После этого можно приступать к обработке полученных данных.
Для примера я возьму простенькую конструкцию отсюда:
[cc lang=»XML»]
это скриптовый язык? Все раскрывается в этом документальном фильме,
похожем на фильм ужасов.
[/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.
Принимайте на вооружение и усложняйте!
Безошибочного Вам кода!