&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
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 решает все мои задачи в web75
]]>
Добавление элементов и атрибутов
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 решает все мои задачи в web75PG
]]>
Взаимодействие с 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