Вопрос-ответ

Best XML parser for Java [closed]

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

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

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

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

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

Переведено автоматически
Ответ 1

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

В принципе, существует три стандартных способа обработки XML:


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

  • DOM Этот метод создает дерево объектов, которое позволяет вам изменять его случайным образом, поэтому оно лучше подходит для сложных манипуляций с XML.

  • StAX Находится посередине пути между SAX и DOM. Вы просто пишете код для извлечения данных из интересующего вас анализатора при их обработке.

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

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

Ответ 2

Вот хорошее сравнение 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, streaming Push, streaming In memory tree XSLT Правило

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

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

ПРОЦЕССОР и память Хорошее Зависит от хорошего

Только пересылка Да, да, Нет, Нет

Читать XML Да, да, да

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

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

Ответ 3

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

Ответ 4

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

2023-03-22 09:31 java xml