Бочонок
http://frontender.info
PHP, XML и пространства имен.
Приятного времени суток.
Есть некий XML в формате атома.
причем отдается то так то сяк:
http://delphi.pastebin.com/rq8UnvGq
http://delphi.pastebin.com/ZkEggNcD
Работать с ним можно. Не проблема.
Проблема в том, что я хочу все сделать "как лучше".
Это такая болезнь. Вроде герпеса.
Помогите выяснить что именно лучше.
Просто так с этим безобразием работать нельзя.
Потому что ни simplexml ни dom не умеют работать с злополучными неймспейсами, если XML парсится из строки. По крайней мере у меня это не вышло и после несколькиз часов в гугле я пришел к выводу, что не только у меня.
Я пока вижу 2 основных кандидата:
1. Просто почистить с помощью регулярного выражения получаемый от Яндекса XML убрав все пространства имен к черту. И дальше работать обычным simplexml. Работает. Проверенно.
2. Использовать dom и xpath.
Тоже работает. Правда у меня мало опыта общения с xpath и запрос вызывает у меня некоторые сомнения.
Что выбрать?
Или я что то совсем не то делаю и нормальные люди делают это все по джругому и намного лучше?
Помогите прийти к какому то выводу, пожалуйста.
Приятного времени суток.
Есть некий XML в формате атома.
причем отдается то так то сяк:
http://delphi.pastebin.com/rq8UnvGq
http://delphi.pastebin.com/ZkEggNcD
Работать с ним можно. Не проблема.
Проблема в том, что я хочу все сделать "как лучше".
Это такая болезнь. Вроде герпеса.
Помогите выяснить что именно лучше.
Просто так с этим безобразием работать нельзя.
Потому что ни simplexml ни dom не умеют работать с злополучными неймспейсами, если XML парсится из строки. По крайней мере у меня это не вышло и после несколькиз часов в гугле я пришел к выводу, что не только у меня.
Я пока вижу 2 основных кандидата:
1. Просто почистить с помощью регулярного выражения получаемый от Яндекса XML убрав все пространства имен к черту. И дальше работать обычным simplexml. Работает. Проверенно.
2. Использовать dom и xpath.
PHP:
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$result = $xpath->query("//node()[@id='album-list']");
$this->current_user->album_list_href = $result->item(0)->attributes->getNamedItem('href')->value;
Что выбрать?
Или я что то совсем не то делаю и нормальные люди делают это все по джругому и намного лучше?
Помогите прийти к какому то выводу, пожалуйста.