&reftitle.examples;
Основы работы с модулем SimpleXML
Часть примеров этого руководства включает XML-строку. Чтобы
не повторять строку в каждом примере, её помещают в файл,
который и включают в каждый пример. Строка приведена в следующем
примере. Кроме этого можно создать XML-документ и считывать его
функцией simplexml_load_file.
Файл example.php с XML строкойPHP: Появление ПарсераMs. CoderOnlivia ActoraMr. CoderEl ActÓr
Таким образом, это язык. Это всё равно язык программирования. Или
это скриптовый язык? Обо всём рассказывает этот документальный фильм,
похожий на фильм ужасов.
PHP решает все мои проблемы в вебе75
XML;
?>
]]>
Пользоваться модулем SimpleXML очень просто! Попробуйте получить
какую-нибудь строку или число из базового XML-документа.
Получение части документа <plot>
movie[0]->plot;
?>
]]>
&example.outputs;
В PHP получить доступ к элементу в XML-документе, который содержит
в названии недопустимые символы (например, дефис), можно путём
заключения имени элемента в фигурные скобки и апострофы.
Получение строки <line>
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 также умеет получать доступ к атрибутам элемента.
Получить доступ к атрибуту элемента можно так же, как
к элементам массива (array).
первого фильма.
* Так же выведем шкалу оценок. */
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;
Сравнение двух элементов
Два элемента SimpleXMLElements признаются разными, даже если
они указывают на один и тот же объект.
]]>
&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 CoderOnlivia ActoraMr. CoderEl ActÓr
Таким образом, это язык. Это всё равно язык программирования. Или
это скриптовый язык? Обо всём рассказывает этот документальный фильм,
похожий на фильм ужасов.
PHP решает все мои задачи в вебе75
]]>
Добавление элементов и атрибутов
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. CoderOnlivia ActoraMr. CoderEl ActÓrMr. ParserJohn Doe
Таким образом, это язык. Это всё равно язык программирования. Или
это скриптовый язык? Обо всём рассказывает этот документальный фильм,
похожий на фильм ужасов.
PHP решает все мои задачи в вебе75PG
]]>
Взаимодействие с DOM
PHP умеет преобразовывать XML-узлы из SimpleXML в формат DOM и наоборот.
Пример показывает, как можно изменить DOM-элемент в SimpleXML.
loadXML('чепуха');
if (!$dom) {
echo 'Ошибка при разборе документа';
exit;
}
$books = simplexml_import_dom($dom);
echo $books->book[0]->title;
?>
]]>
&example.outputs;
Работа с ошибками 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_errorslibxml_get_errors