Я делаю надстройку для Firefox, и она загружает HTML-страницу, используя ajax (надстройка имеет Панель XUL). Вместо этого я загружаю содержимое и анализирую его как текст с регулярным выражением.
Но у меня возник вопрос. Что было бы лучше использовать, xPath или регулярное выражение? Что быстрее выполнить?
Страница HTML будет состоять из сотен элементов, содержащих один и тот же текст, и я в основном хочу подсчитать, сколько там элементов.
Я хочу, чтобы мое дополнение работало как настолько быстро, насколько это возможно, и я не знаю, что стоит за regexp или xPath, поэтому я не знаю, какой из них более эффективен.
Надеюсь, я был ясен. Спасибо
Всякий раз, когда вы имеете дело с XML, используйте XPath (или XSLT, XQuery , SAX, DOM или любой другой XML-совместимый метод для просмотра ваших данных). Не никогда используйте регулярные выражения для этой задачи .
Почему? Обработка XML сложна и имеет дело со всеми ее странностями, внешними / проанализированными / не проанализированными объектами, DTD, инструкциями обработки, обработкой пробелов, сворачиванием, нормализацией Unicode, разделами CDATA и т. Д., Что делает очень трудным для создания надежного регулярного выражения. способ получения ваших данных. Просто учтите, что отрасли потребовались годы, чтобы научиться лучше всего разбирать XML, и это должно быть достаточной причиной , чтобы не пытаться делать это самостоятельно .
Отвечая на ваш вопрос.: когда дело доходит до скорости (которая , а не должна быть здесь вашей главной заботой), она сильно зависит от реализации компилятора / процессора XPath или Regex. Иногда XPath будет быстрее (например, при использовании ключей, если возможно, или скомпилированном XSLT), в других случаях регулярные выражения будут быстрее (если вы можете использовать предварительно скомпилированное регулярное выражение и ваш запрос будет легким). Но с HTML / XML с регулярными выражениями всегда непросто просто из-за проблем с совпадающими вложенными круглыми скобками (тегами), которые нельзя надежно решить с помощью одних только регулярных выражений.
Если ввод огромен, регулярное выражение будет работать быстрее, если только реализация XPath не может выполнять потоковую обработку (что, как я считаю, не является методом внутри Firefox).
Вы написали:
«который более эффективен» *
тот, который быстрее всего приводит вас к надежной и стабильной реализации, которая является сравнительно быстрой. Используйте XPath. Это то, что используется в Firefox и других браузерах, если вам нужно, чтобы ваш код запускался из браузера.