PHP, XML и пространства имен.

Бочонок

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.
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;
Тоже работает. Правда у меня мало опыта общения с xpath и запрос вызывает у меня некоторые сомнения.

Что выбрать?
Или я что то совсем не то делаю и нормальные люди делают это все по джругому и намного лучше?
Помогите прийти к какому то выводу, пожалуйста.
 

Sigorma

Новичок
В 1ом и 2ом варианте использовал бы xpath
выглядит более читабельно.
 

Бочонок

http://frontender.info
2Sigorma: xpath по идее не очень быстрый ... в любом случае медленее чем работа непосредственно с объектом simplexml.

-~{}~ 02.03.10 00:10:

Но в simplexml все для этого есть ... так что это не проблема.
Вопрос в том чистить ли xml от неймспейсов или это не хорошо?
 

Sigorma

Новичок
Вопрос в том чистить ли xml от неймспейсов
Что тебе это даст? Заточив XML под свой формат не факт что его потом смогут прочитать ридеры написанные не тобою, вполне возможно появится необходимость в хранении уже двух копий документов исходного и форматированного под твое приложение.

xpath по идее не очень быстрый
кто сказал?
 

Бочонок

http://frontender.info
Sigorma я нигде не сохраняю XML. Только получаю и интерперетирую. Так что сторонний ридер никогда его не увидит. Кроме того я в любом случае получаю well-formed документ (иначе я не смог бы с ним работать). Так что даже если бы и сохранял проблем бы не было.

Если я знаю формат документа, то могу написать конструкцию вида:
PHP:
$sxml->workspace->collection->item(0)->attributes->href;
Это некая абстрактная конструкция, но суть думаю понятна.
Получить значение href так будет явно бычтрее, чем делать xpath запрос. Думаю, даже если перебирать item в цикле будет быстрее. Или я не прав?

Насколько я понял твои слова: использовать dom xml и xpath. Именно так оно у меня сейчас и работает.

Спасибо за ответ.
Кто то еще что то может подсказать?
 
Сверху