Регулярное выражение против функций XML в PHP - PullRequest
0 голосов
/ 08 октября 2009

В настоящее время я много разбираюсь в данных и играю с PHP-функциями для XML, такими как простой XML и некоторые другие, здесь и там.

Но, похоже, всегда возникает какая-то проблема, связанная с ними, главным образом из-за способа представления данных.

Самый надежный способ, который я нашел, - это всегда просто использовать preg_match_all и регулярное выражение для передачи моих данных в скрипт для обработки.

Кто-нибудь видит проблему с этим? Каковы недостатки использования регулярных выражений, а не готовых парсеров XML сборки?

Моя главная задача - скорость и использование ресурсов сервером.

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Синтаксический анализ XML - это серьезный бизнес с большими накладными расходами. Если ваш поток данных достаточно прост для анализа с помощью регулярных выражений, это будет самый эффективный способ его анализа.

Если вы хотите выполнять синтаксический анализ XML при минимизации ресурсов, лучше всего подойдет парсер SAX. Это не будет так эффективно, как регулярные выражения ручной работы, но может быть достаточно хорошим.

http://www.brainbell.com/tutorials/php/Parsing_XML_With_SAX.htm

Для синтаксических анализаторов DOM и Simple XML требуется загрузить весь документ, затем они могут проверить документ, а затем преобразовать его в структуру узла, а затем вы можете использовать данные. Похоже, много работы для парсера? Это. Но для многих целей это все еще уместно.

В большинстве своих работ я отказался от XML и использую JSON.

1 голос
/ 08 октября 2009

Если вы используете DOMDocument и DOMXpath, я подозреваю, что это решит ваши проблемы.

См. http://jp2.php.net/manual/en/class.domdocument.php и http://jp2.php.net/manual/en/class.domxpath.php

Не могли бы вы привести пример того, что вы пытаетесь сделать?

Редактировать
Чтобы прямо ответить на ваш вопрос, однако: регулярные выражения легко испортить - особенно при обработке иерархических структур, таких как xml. Даже если вы все сделаете правильно, скорее всего, это будет медленнее, чем использование xpath.

Редактировать 2
Просто добавим, что реализация php для xpath, DOMXpath поддерживает только xpath 1.0. Если вам нужно использовать регулярные выражения для оценки содержимого элемента или одного из его атрибутов, вам нужно что-то, поддерживающее xpath 2.0 .... или использовать рискованное, подверженное ошибкам регулярное выражение.

...