Примеры
Практически все примеры используют XML-документ. Вместо того, чтобы каждый раз повторять содержание XML-документа в каждом примере, мы поместим XML-документ в файл, который будет читать при помощи функции simplexml_load_file().
<?php $xmlstr = PHP: Behind the ParserMs. CoderOnlivia ActoraMr. CoderEl ActÓr So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary.
75
XML;
Простоту работы с SimpleXML можно продемонстрировать извлечением текста из заданного элемента XML-документа.
Пример 2. Получение текста в <plot>
<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); echo $xml->movie->plot; // "So this language. It's like..." ?>
Пример 3. Работа с группой элементов в SimpleXML
Можно применять циклы для получения дочерних элементов заданного элемента (если дочерние элементы существуют).
<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); /* Для каждого элемента мы отображаем элемент . */ foreach ($xml->movie as $movie) { echo $movie->plot, ''; } ?>
Пример 4. Использование атрибутов
Выше было показано как работать с элементами XML-документа и их значениями. SimpleXML также имеет доступ к атрибутам элементов. Атрибуты указанного элемента доступны как ассоциативный массив данного элемента.
<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); /* Получение доступа к атрибутам элементов для первого кино.*/ foreach ($xml->movie->rating as $rating) { switch((string) $rating) { // Возвращает атрибуты как элементы массива case 'thumbs': echo $rating, ' thumbs up'; break; case 'stars': echo $rating, ' stars'; break; } } ?>
Пример 5. Сравнение элементов и их атрибутов с текстовыми значениями
Для того, чтобы сравнивать элемент или атрибут со строковыми значениями, или передавать содержание элемента или атрибута в функцию, которая использует строковое значение передаваемого параметра, вы должны использовать элементы и атрибуты как строки с признаком (string). В противном случае PHP воспримет передаваемое значение как объект.
<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); if ((string) $xml->movie->title == 'PHP: Behind the Parser') { print 'Мой любимый фильм.'; } htmlentities((string) $xml->movie->title); ?>
Пример 6. Использование Xpath
В SimpleXML включена поддержка запросов Xpath. Поиск всех элементов :
<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); foreach ($xml->xpath('//character') as $character) { echo $character->name, ' съиграл ', $character->actor, ''; } ?>
‘//’ служит групповым символом. Чтобы задать абсолютный путь, требуется убрать один слеш.
Пример 7. Задание новых значений
Данные в SimpleXML не могут быть постоянными. Объект учитывает изменения всех его элементов.
<?php include 'example.php'; $xml = simplexml_load_string($xmlstr); $xml->movie->characters->character->name = 'Miss Coder'; echo $xml->asXML(); ?>
Результатом вышеуказанного примера будет новый XML-документ, идеентичный оригиналу за исключением того, что в новом XML-документе будет вместо Ms. Coder будет Miss Coder.
Пример 8. Взаимодействие с DOM
PHP имеет механизм конвертации XML-документов из формата SimpleXML в DOM и обратно. Следующий пример показывает как конвертировать DOM-элемент в SimpleXML-элемент:
<?php $dom = new domDocument; $dom->loadXML('blah'); if (!$dom) { echo 'Ошибка преобразования документа'; exit; } $s = simplexml_import_dom($dom); echo $s->book->title; ?>