Справочник по PHP : Функции работы с данными : XML : SimpleXML

Материал из Справочник Web-языков.

Перейти к: навигация, поиск
Главная  ::. PHP  ::. Функции работы с данными  ::. XML  ::. SimpleXML

Содержание

[править] Введение

SimpleXML предоставляет очень простой в восприятии, интуитивно-понятный доступ к XML-документам, позволяющий совершать разнообразные операции с элементами XML-документа и их атрибутами.

[править] Требования

SimpleXML присутствует в PHP начиная с версии 5.

[править] Установка

SimpleXML установлен в PHP по умолчанию. Для того, чтобы отключить это расширение, перекомпилируйте PHP с ключом --disable-simplexml.

[править] Примеры

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

<?php
$xmlstr 
= <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&amp;#211;r</actor>
   </character>
  </characters>
  <plot>
   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.
  </plot>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
</movies>
XML;
?>

Простоту работы с SimpleXML можно продемонстрировать извлечением текста из заданного элемента XML-документа.

Пример 2. Получение текста в <plot>


<?php
include 'example.php';
$xml simplexml_load_string($xmlstr);
echo 
$xml-&gt;movie[0]-&gt;plot// "So this language. It's like..."
?>

Пример 3. Работа с группой элементов в SimpleXML

Можно применять циклы для получения дочерних элементов заданного элемента (если дочерние элементы существуют).


<?php
include 'example.php';

$xml simplexml_load_string($xmlstr);

/* Для каждого элемента &lt;movie&gt; мы отображаем элемент . */
foreach ($xml-&gt;movie as $movie) {
   echo 
$movie-&gt;plot'&lt;br /&gt;';
}

?>

Пример 4. Использование атрибутов

Выше было показано как работать с элементами XML-документа и их значениями. SimpleXML также имеет доступ к атрибутам элементов. Атрибуты указанного элемента доступны как ассоциативный массив данного элемента.

<?php
include 'example.php';

$xml simplexml_load_string($xmlstr);

/* Получение доступа к атрибутам элементов &lt;rating&gt; для первого кино.*/
foreach ($xml-&gt;movie[0]-&gt;rating as $rating) {
    switch((string) 
$rating['type']) { // Возвращает атрибуты как элементы массива
    
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-&gt;movie-&gt;title == 'PHP: Behind the Parser') {
    print 
'Мой любимый фильм.';
}

htmlentities((string) $xml-&gt;movie-&gt;title);
?>

Пример 6. Использование Xpath

В SimpleXML включена поддержка запросов Xpath. Поиск всех элементов :


<?php
include 'example.php';
$xml simplexml_load_string($xmlstr);

foreach (
$xml-&gt;xpath('//character') as $character) {
    echo 
$character-&gt;name' съиграл '$character-&gt;actor'&lt;br /&gt;';
}
?>

'//' служит групповым символом. Чтобы задать абсолютный путь, требуется убрать один слеш.

Пример 7. Задание новых значений

Данные в SimpleXML не могут быть постоянными. Объект учитывает изменения всех его элементов.


<?php
include 'example.php';
$xml simplexml_load_string($xmlstr);

$xml-&gt;movie[0]-&gt;characters-&gt;character[0]-&gt;name 'Miss Coder';

echo 
$xml-&gt;asXML();
?>

Результатом вышеуказанного примера будет новый XML-документ, идеентичный оригиналу за исключением того, что в новом XML-документе будет вместо Ms. Coder будет Miss Coder.

Пример 8. Взаимодействие с DOM

PHP имеет механизм конвертации XML-документов из формата SimpleXML в DOM и обратно. Следующий пример показывает как конвертировать DOM-элемент в SimpleXML-элемент:

<?php
$dom 
= new domDocument;
$dom-&gt;loadXML('&lt;books&gt;&lt;book&gt;&lt;title&gt;blah&lt;/title&gt;&lt;/book&gt;&lt;/books&gt;');
if (!
$dom) {
     echo 
'Ошибка преобразования документа';
     exit;
}

$s simplexml_import_dom($dom);

echo 
$s-&gt;book[0]-&gt;title;
?>

[править] Содержание:

SimpleXMLElement->asXML -- Возвращает правильно сформированный XML-документ

SimpleXMLElement->attributes -- Возвращает атрибуты элемента.

SimpleXMLElement->children -- Возвращает дочерние элементы для заданного элемента

SimpleXMLElement->xpath -- Выполняет Xpath-запрос к XML-данным

simplexml_import_dom -- Возвращает объектSimpleXMLElement, созданный из DOM-объекта.

simplexml_load_file -- Интерпретирует XML-файл в объект

simplexml_load_string -- Интерпретирует строку с XML в объект

Личные инструменты
1.6673719883