Синтаксический анализ XML: JDOM или RegEx? Что быстрее? - PullRequest
1 голос
/ 21 марта 2011

Моему коллеге необходимо разработать плагин Eclipse, который должен анализировать несколько файлов XML для проверки правил программирования, наложенных клиентом (например, xsl:for-each или пространства имен не объявлены, но не используются).Необходимо регулярно анализировать около 1000 файлов, каждый из которых содержит около 300-400 строк.

Нам было интересно, какое решение было быстрее для этого.Я думаю о JDOM, и он думает о RegEx.

Кто-нибудь может помочь нам решить, что лучше?

Спасибо

Ответы [ 4 ]

7 голосов
/ 21 марта 2011

ДОМ, руки вниз. RegEx было бы безумием. Используйте инструмент, который был предназначен для работы.

6 голосов
/ 21 марта 2011

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

Поскольку файлы довольно маленькие, JDom значительно облегчит вашу работу. Для файлов большего размера вам придется использовать SAX или аналогичный анализатор (поэтому вам не нужно хранить весь файл в оперативной памяти).

3 голосов
/ 21 марта 2011

Если вы попытаетесь разобрать XML с помощью регулярных выражений, вы попадаете в мир боли.Если важна скорость, использование API на основе событий может быть немного быстрее, чем DOM / JDOM.

2 голосов
/ 21 марта 2011

Если все проверки просты: «нет» или нет пространства имен, лучше всего подойдет парсер StAX, поскольку вы просто проходите через него документы, получаете все события «start» начальных элементов и затем выполняете проверку.Для этого парсеру требуется относительно мало памяти.

Если вам нужна ссылочная проверка, DOM может быть лучше, так как вы можете легко обходить дерево (возможно, через xpath).

...