Мне нужно прочитать мелкие (не более нескольких МБ, в кодировке UTF-8) XML-файлы, покопаться в поиске различных элементов и атрибутов, возможно, изменить некоторые из них и снова записать XML на диск (желательно с хорошим форматированием с отступами) ,
Что будет лучшим парсером XML для моих нужд? Есть из чего выбирать. Вот некоторые из них, которые мне известны:
И, конечно, тот, что в JDK (я использую Java 6). Я знаком с Xerces, но считаю это неуклюжим.
Рекомендации?
Ответы:
Если скорость и память не проблема, то dom4j - действительно хороший вариант. Если вам нужна скорость, использование синтаксического анализатора StAX, такого как Woodstox, - правильный путь, но вам нужно написать больше кода, чтобы добиться цели, и вы должны привыкнуть обрабатывать XML в потоках.
источник
Я думаю, что вы не должны рассматривать какую-либо конкретную реализацию парсера. Java API для обработки XML позволяет вам использовать любую соответствующую реализацию синтаксического анализатора стандартным способом. Код должен быть намного более переносимым, и когда вы понимаете, что определенный синтаксический анализатор слишком стар, вы можете заменить его другим без изменения строки кода (если вы делаете это правильно).
В основном есть три способа обработки XML стандартным способом:
Забудьте о проприетарных 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 )
API Type Pull, потоковая передача Push, потоковая передача В дереве памяти правило XSLT
Простота использования Высокий Средний Высокий Средний
Возможность XPath Нет Нет Да Да
Процессор и память хорошо хорошо меняется
Только вперед Да Да Нет Нет
Читать XML Да Да Да Да
Написать XML Да Нет Да Да
CRUD Нет Нет Да Нет
источник
Простой XML http://simple.sourceforge.net/ очень прост для (де) сериализации объектов.
источник
В дополнение к SAX и DOM существует разбор STaX, доступный с использованием XMLStreamReader, который является синтаксическим анализатором XML.
источник
Я обнаружил, что dom4j является инструментом для работы с XML. Особенно по сравнению с Xerces.
источник
Я бы не рекомендовал это, потому что у вас много «мышления» в вашем приложении, но использование XSLT может быть лучше (и, возможно, быстрее с компиляцией XSLT-to-bytecode), чем манипулирование Java.
источник
Если вы меньше заботитесь о производительности, я большой поклонник Apache Digester, поскольку он по сути позволяет отображать напрямую из XML в Java Beans.
В противном случае вы должны сначала проанализировать, а затем построить ваши объекты.
источник