Что быстрее, XPath или Regexp? - PullRequest
9 голосов
/ 04 августа 2010

Я делаю надстройку для Firefox, и она загружает HTML-страницу, используя ajax (надстройка имеет панель XUL).

Теперь на этом этапе я не искал способы создания document объекта и помещения в него содержимого запроса ajax, а затем с помощью xPath, чтобы найти то, что мне нужно.
Вместо этого я загружаю содержимое и анализирую его как текст с регулярным выражением.

Но у меня есть вопрос. Что было бы лучше использовать, xPath или регулярное выражение? Что быстрее выполнить?

HTML-страница будет состоять из сотен элементов, содержащих один и тот же текст, и я в основном хочу подсчитать, сколько там элементов.

Я хочу, чтобы моя надстройка работала как можно быстрее, и я не знаю, что стоит за regexp или xPath, поэтому я не знаю, какая из них более эффективна.

Надеюсь, я был чист. Спасибо

1 Ответ

17 голосов
/ 04 августа 2010

Всякий раз, когда вы имеете дело с XML, используйте XPath (или XSLT, XQuery, SAX, DOM или любой другой XML-ориентированный метод для просмотра ваших данных). Не никогда использовать регулярные выражения для этой задачи .

Почему?Обработка XML является сложной и имеет дело со всеми ее странностями, внешними / разобранными / неразобранными сущностями, DTD, инструкциями обработки, обработкой пробелов, свертыванием, нормализацией Юникода, разделами CDATA и т. Д. очень трудно создать надежное регулярное выражение-способ получения ваших данных.Просто учтите, что индустрии потребовались годы, чтобы научиться лучше разбирать XML, должно быть достаточно оснований , чтобы не пытаться сделать это самостоятельно .

Отвечая на ваш вопрос: когда это произойдетдля скорости (которая должна не быть вашей главной задачей здесь), это сильно зависит от реализации компилятора / процессора XPath или Regex.Иногда XPath будет быстрее (т. Е. При использовании ключей, если возможно, или скомпилированного XSLT), в других случаях регулярные выражения будут быстрее (если вы можете использовать предварительно скомпилированное регулярное выражение, и ваш запрос прост).Но регулярные выражения с HTML / XML никогда не бывают простыми просто из-за проблемы с вложенными скобками (тегами), которая не может быть надежно решена только с помощью регулярных выражений.

Если ввод огромен, регулярное выражение будет стремиться быть быстрее, если реализация XPath не может выполнять потоковую обработку (что, я считаю, не метод внутри Firefox).

Вы писали:

«который более эффективен» *

- тот, который быстрее всего обеспечивает надежную и стабильную реализацию, которая сравнительно быстра.Используйте XPath.Это то, что используется в Firefox и других браузерах, если вам нужен код для запуска из браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...