Что быстрее, XPath или Regexp?

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

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

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

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

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

9
задан holographic-principle 15 July 2013 в 12:29
поделиться

1 ответ

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

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

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

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

Вы написали:

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

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

17
ответ дан 4 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: