&reftitle.examples;
Основы работы с модулем SimpleXML Для работы части примеров руководства к модулю SimpleXML потребуется XML-строка. Вместо повторения строки в каждом примере, определим строку в файле и подключим файл в примерах. При тестировании методов модуля подключите этот файл или создайте отдельный XML-документ и считайте строку в формате XML функцией simplexml_load_file. Файл examples/simplexml-data.php с XML-строкой для включения PHP: Устройство парсера Ms. Coder Onlivia Actora Mr. Coder El ActÓr Так что же, PHP — язык программирования или всё же скриптовый язык? Истина откроется в этом захватывающем пародийном фильме ужасов в формате документальной драмы. Каких только веб-задач не решает PHP! 7 5 XML; ?> ]]> Простота работы с модулем SimpleXML проявляется при извлечении строки или числа из базового XML-документа. Чтение сюжета из элемента <literal><plot></literal> movie[0]->plot; ?> ]]> &example.outputs; Для доступа к элементам XML-документа, названия которых содержат недопустимые, с точки зрения PHP-соглашения об именовании, символы наподобие дефиса, название элемента заключают в фигурные скобки и апострофы. Доступ к строке элемента <literal><line></literal> movie->{'great-lines'}->line; ?> ]]> &example.outputs; Доступ к неуникальным элементам средствами модуля SimpleXML Для перебора множественных одноимённых дочерних элементов узла применяют стандартные методы итерации. каждого узла */ foreach ($movies->movie->characters->character as $character) { echo $character->name, ' играет ', $character->actor, PHP_EOL; } ?> ]]> &example.outputs; Свойства наподобие $movies->movie, которое содержал предыдущий пример, — не массивы, а итерируемые и доступные как массив объекты. Работа с атрибутами До сих пор мы получали только названия и значения элементов. Модуль SimpleXML умеет получать доступ и к атрибутам элементов. Доступ к атрибутам элемента получают аналогично доступу к элементам массива. первого фильма * и вывод шкалы оценок */ foreach ($movies->movie[0]->rating as $rating) { switch ((string) $rating['type']) { // Получаем атрибуты элемента по индексу case 'thumbs': echo $rating, ' thumbs up'; break; case 'stars': echo $rating, ' stars'; break; } } ?> ]]> &example.outputs; Сравнение элементов и атрибутов с текстом Для сравнения со строкой или передачи в функцию, которая требует строку, элементы или атрибуты приводят к строке оператором приведения (string), иначе PHP обрабатывает элементы и атрибуты как объекты. movie->title == 'PHP: Устройство парсера') { print 'Мой любимый фильм: '; } echo "«", htmlentities((string) $movies->movie->title), "»"; ?> ]]> &example.outputs; Сравнение двух элементов Два объекта SimpleXMLElement считаются разными, даже если указывают на один и тот же элемент. ]]> &example.outputs; XPath — язык запросов к элементам XML-документа Модуль SimpleXML включает встроенную поддержку языка XPath. Поиск всех элементов <character>. Запись '//' работает как подстановочный знак, или шаблон. Один слеш опускают, чтобы указать абсолютный путь: xpath('//character') as $character) { echo $character->name, ' играет ', $character->actor, PHP_EOL; } ?> ]]> &example.outputs; Установка значений Каждый элемент в объекте модуля SimpleXML доступен для изменения. movie[0]->characters->character[0]->name = 'Miss Coder'; echo $movies->asXML(); ?> ]]> &example.outputs; PHP: Устройство парсера Miss Coder Onlivia Actora Mr. Coder El ActÓr Так что же, PHP — язык программирования или всё же скриптовый язык? Истина откроется в этом захватывающем пародийном фильме ужасов в формате документальной драмы. Каких только веб-задач не решает PHP! 7 5 ]]> Добавление элементов и атрибутов Модуль SimpleXML легко добавляет дочерние элементы и атрибуты. movie[0]->characters->addChild('character'); $character->addChild('name', 'Mr. Parser'); $character->addChild('actor', 'John Doe'); $rating = $movies->movie[0]->addChild('rating', 'PG'); $rating->addAttribute('type', 'mpaa'); echo $movies->asXML(); ?> ]]> &example.outputs; PHP: Устройство парсера Ms. Coder Onlivia Actora Mr. Coder El ActÓr Mr. ParserJohn Doe Так что же, PHP — язык программирования или всё же скриптовый язык? Истина откроется в этом захватывающем пародийном фильме ужасов в формате документальной драмы. Каких только веб-задач не решает PHP! 7 5 PG ]]> Взаимодействие с модулем DOM В PHP предусмотрели механизм преобразования XML-узлов между форматами модулей SimpleXML и DOM. Пример показывает, как изменить DOM-элемент в SimpleXML. loadXML('чепуха'); if (!$dom) { echo 'Ошибка при разборе документа'; exit; } $books = simplexml_import_dom($dom); echo $books->book[0]->title; ?> ]]> &example.outputs; Работа с пространствами имён Onlivia Actora XML; $movies = simplexml_load_string($data); // Пространство имён http://www.w3.org/XML/1998/namespace доступно по префиксу "xml" echo $movies->movie->attributes("xml", true)["id"] . "\n"; // Атрибуты в пространстве имён доступны через метод attributes() echo $movies->movie->attributes("a", true)["link"] . "\n"; // Доступ к атрибутам пространства имён возможен по URI-идентификатору, а не только по префиксу echo $movies->movie->attributes("http://a")["link"] . "\n"; // Дочерние элементы доступны через метод children() echo $movies->movie->children("http://a")->actor . "\n"; // Вызов метода xpath() с префиксом требует предварительной регистрации этого префикса $movies->registerXPathNamespace("a", "http://a"); echo count($movies->xpath("//a:actor")) . "\n"; // Даже пространство имён по умолчанию потребуется зарегистрировать $movies->registerXPathNamespace("default", "http://default"); echo count($movies->xpath("//default:movie")) . "\n"; // Запрос возвращает пустой результат, // поскольку элемент movie принадлежит пространству имён, которое не указали в запросе echo count($movies->xpath("//movie")) . "\n"; ?> ]]>
Обработка ошибок в XML-документах Ошибки при загрузке XML-документов обрабатывают функциями модуля libxml, которыми возможно подавить все XML-ошибки, а затем обработать каждую ошибку отдельно. Объект LibXMLError, который возвращает функция libxml_get_errors, содержит ряд свойств, в том числе сообщение, номер строки и колонку, или позицию, ошибки. Загрузка XML-строки с неправильным синтаксисом "); if (!$sxe) { echo "Ошибка загрузки XML\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } } ?> ]]> &example.outputs; ' expected Opening and ending tag mismatch: xml line 1 and broken Premature end of data in tag broken line 1 ]]>
&reftitle.seealso; libxml_use_internal_errors libxml_get_errors Класс