Я уже останавливался на теме парсинга XML-файлов в статье Как я научился парсить XML в PHP. Сегодня я обнаружил, что есть способ вытаскивать данные из XML гораздо более приятный и менее подверженный ошибкам. Способ этот основан на использовании расширения SimpleXML, которое доступно в PHP начиная с версии 5.
Вообще, Вы наверно заметили, что я в последних статьях касаюсь только версии 5, не рассматривая при этом более старые версии. Но на то они и старые, чтобы их не рассматривать
Сейчас практически все хостинги поддерживают версию 5 интерпретатора пхп.
Итак. Будем рассматривать, что же это за расширение такое - SimpleXML. Оказывается, вытащить данные из XML теперь проще простого. Например, у нас есть файл со следующей структурой, описывающей книгу:
books.xml
<?xml version=’1.0’ ?>
<books>
<book>
<title>Название книги</title>
<author>Имя и фамилия автора</author>
<pages>Количество страниц</pages>
<isbn>ISBN</isbn>
<year>Год издания</year>
</book>
</books>
Так вот, чтоб вытащить например все книги из этого хранилища, нам достаточно превратить этот файл в объект с помощью simplexml_load_file и перечислить элементы book:
getbooks.php
<?
$xml = simplexml_load_file(‘books.xml’);
foreach ($xml->book as $book) {
$book->title; // извлекаем название книги
$book->author; // извлекаем имя и фамилию автора
…
}
?>
Правда красиво? А главное - легко!
Кстати замечу, что если у нас есть содержимое xml в памяти (переменной), а не на диске (в файле), то можно использовать simplexml_load_string:
getbooks2.php
<?
// так мы присвоим переменной $xml_content содержимое документа
$xml_content = <<<XML
<?xml version=’1.0’ ?>
<books>
<book>
<title>Название книги</title>
<author>Имя и фамилия автора</author>
<pages>Количество страниц</pages>
<isbn>ISBN</isbn>
<year>Год издания</year>
</book>
</books>
XML;
$xml = simplexml_load_string($xml_content);
foreach ($xml->book as $book) {
$book->title; // извлекаем название книги
$book->author; // извлекаем имя и фамилию автора
…
}
?>
Заметили, как я тут применил еще одну возможность php для объясления строковых переменных? Конечно заметили! Строку можно объявлять и без кавычек, но для этого ее нужно обрамлять строками
<<<[ИДЕНТИФИКАТОР]
[строка]
[ИДЕНТИФИКАТОР];
Между <<< и [ИДЕНТИФИКАТОР] не должно быть пробелов.
Ну это конечно к статье не относится. Я так, кстати заметил просто.
Вооот, теперь мы знаем, как легче можно извлечь информацию из xml-документов. Кстати, SimpleXML умеет работать с языком запросов XPath, который тоже используется для извлечения информации из XML-документа, но на этом я остановлюсь в отдельной статье.