Работа с XML-данными в php
Table of Contents
Если на сервере стоит версия php >= 5.0 (а сложно представить другое;)), то удобнее всего пользоваться классом SimpleXML.
Здесь я опишу работу с ним.
Создание объекта
2 основных способа — через конструктор и через factory-функцию simplexml_load_string.
Второй способ лучше тем, что при ошибке создания объекта вернёт false.
Правда, при этом будет выдавать E_WARNING, что не очень приятно.
Но есть способ побороться с этим — использовать функцию http://www.php.net/manual/en/function.libxml-use-internal-errors.php, которая запрещает вывод ошибок при парсинге XML-данных и позволяет приложению управляться с ними самому.
Соответственно, создание объекта SimpleXML можно реализовать так:
1 2 3 4 5 6 7 8 9 |
<?php public static function parse2Obj($xmlString) { libxml_use_internal_errors(true); $xmlObj = @simplexml_load_string($xmlString);//на всякий случай;) if ($xmlObj === false) return false; return $xmlObj; } |
Дальнейшая работа с данными
Далее нужно обработать полученные данные.
Здесь всё достаточно просто: каждый из XML-нодов представляет теперь объект класса SimpleXML.
Т.е. к любому узлу можно обратиться примерно так:
1 |
$xml->movie[0]->plot; |
При этом если используются спецсимволы в «имени свойства», то можно сделать так:
1 |
$xml->movie->{'great-lines'}->line; |
Для нескольких дочерних элементов можно использовать циклы
1 2 3 4 |
foreach ($xml->movie as $movie) { echo $movie->plot, '<br />'; } |
При этом, правда, есть нюансы — к примеру, неправильно отрабатывает count($xml->movie).
Для нормальной работы необходимо использовать метод children (странное название):
1 2 3 4 5 |
$t = $xml->movie->children(); foreach ($t as $movie) { echo $movie->plot, '<br />; } |
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.