Я бы не слишком беспокоился о производительности здесь, я бы считал их «сопоставимыми». Чтобы точно определить это, необходимо будет выполнить тесты, поскольку это будет зависеть от размера документа и того, как написано регулярное выражение.
Вместо этого я бы беспокоился о точности. В целом DOMDocument
будет намного лучше анализировать XML, поскольку он был создан для чтения и понимания языка. Однако он не работает с <includes module='footer'>
, потому что это незакрытый тег (ожидается: </includes>
).
Наиболее распространенные проблемы с форматированием HTML/XML можно исправить с помощью PHP-класса Tidy
. . Я бы проверил это, так как вы должны получить гораздо больше ">"ожидаемые результаты" по сравнению с использованием регулярного выражения для синтаксического анализа. Если вы использовали регулярное выражение, технически могут быть атрибуты до/после module
, элементы внутри элемента includes
, неожиданные символы, такие как <includes module='foo>bar'>
и т. д.
В конце концов, если ваш XML находится в «контролируемой» среде (т.е. вы знаете, что может и не может произойти, вы знаете, какие возможные символы будет содержать module
, вы знаете, что это всегда будет самозакрывающийся элемент, содержащий теперь дочерние элементы, и т. д.), чем во что бы то ни стало использовать регулярное выражение. Просто знайте, что он ищет очень конкретный набор правил. Однако, если вы ожидаете, что это будет работать с «всем, что вы бросите в него».. пожалуйста, используйте синтаксический анализатор DOM (после Tidy
, чтобы избежать исключений), независимо от производительности (хотя я уверен, что во многих случаях это будет очень сопоставимо ).
Кроме того, последнее замечание: если вы планируете находить/заменять/манипулировать многими узлами в документе, вы увидите значительное увеличение производительности при использовании парсера DOM. Анализатор DOM возьмет документ и проанализирует его один раз. Затем вы просто просматриваете данные, которые он уже загрузил в свой класс. Это можно сравнить с использованием регулярных выражений, где каждое отдельное выражение будет просматриваться по всему документу в поисках набора совпадений.
Если вы хотите, чтобы я уточнил какую-либо область (например, привел Tidy
пример или поработал над эталоном ), дай мне знать.
person
Sam
schedule
23.05.2014