Лучший синтаксический анализатор XML для Java [закрыт]



Мне нужно прочитать небольшие (не более нескольких МБ, кодированные UTF-8) XML-файлы, покопаться в различных элементах и атрибутах, возможно, изменить несколько и снова записать XML на диск (желательно с хорошим форматированием с отступом).



Что было бы лучшим синтаксическим анализатором XML для моих потребностей? Есть много, чтобы выбрать из. Некоторые из них я знаю являются:




и, конечно, один в JDK (я использую Java 6). Я знаком с Ксерксом, но считаю его неуклюжим.



рекомендации?

638   8  

8 ответов:

Если скорость и память не проблема,dom4j - это действительно хороший вариант. Если вам нужна скорость, используя парсер StAX, например Woodstox это правильный путь, но вы должны написать больше кода, чтобы сделать все, и вы должны привыкнуть обрабатывать XML в потоках.

Я думаю, что вы не должны рассматривать какую-либо конкретную реализацию парсера. Java API для обработки XML позволяет использовать любую соответствующую реализацию парсера стандартным способом. Код должен быть гораздо более переносимым, и когда вы поймете, что конкретный парсер стал слишком старым, вы можете заменить его другим, не меняя строку вашего кода (если вы делаете это правильно).

в основном существует три способа обработки XML стандартным способом:

  • Сакс Это самый простой API. Вы читаете XML, определяя класс обработчика, который получает данные внутри элементов / атрибутов, когда XML обрабатывается последовательным способом. Это быстрее и проще, если вы только планируете прочитать некоторые атрибуты/элементы и/или напишите несколько значений (ваш случай).
  • DOM этот метод создает дерево объектов, которое позволяет изменять / обращаться к нему случайным образом, поэтому он лучше подходит для сложных XML-манипуляций и обращение.
  • StAX это в середине пути между SAX и DOM. Вы просто пишете код, чтобы вытащить данные из парсера, который вас интересует, когда он обрабатывается.

забудьте о проприетарных API, таких как JDOM или Apache (т. е. Apache Xerces XMLSerializer) потому что свяжет вас с конкретной реализацией, которая может развиваться во времени или потерять обратную совместимость, что заставит вас изменить свой код в будущем когда вы хотите перейти на новую версию JDOM или любой другой парсер, который вы используете. Если вы придерживаетесь стандартного API Java (используя фабрики и интерфейсы), ваш код будет гораздо более модульным и ремонтопригодным.

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

вот хорошее сравнение на DOM, SAX, StAX & TrAX (Источник: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )

функция StAX SAX DOM TrAX

тип API Pull, потоковое нажатие, потоковое в дереве памяти XSLT Правило

простота использования Высокий Средний Высокий Средний

Возможность XPath Нет Нет Да Да

CPU и Хорошо Хорошо Меняется Меняется

Только Да Да                        Нет, Нет

читать XML Да Да Да Да

написать XML Да Нет Да Да

CRUD Нет Нет Да Нет

простой XML http://simple.sourceforge.net/ очень легко для (de)сериализации объектов.

в дополнение к SAX и DOM есть Stax-парсинг, доступный с помощью XMLStreamReader, который является синтаксическим анализатором XML pull.

Я нашел dom4j, чтобы быть инструментом для работы с XML. Особенно по сравнению с Ксерксом.

Я бы не рекомендовал, чтобы у вас было много "мышления" в вашем приложении, но использование XSLT может быть лучше (и потенциально быстрее с компиляцией XSLT-to-bytecode), чем манипуляция Java.

Если вы меньше заботитесь о производительности, я большой поклонник Apache Digester, так как он по существу позволяет отображать непосредственно из XML в Java-бобы.

в противном случае, вы должны сначала проанализировать, а затем построить свои объекты.

Comments

    Ничего не найдено.