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

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

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

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

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

383
задан 26.10.2015, 15:22

6 ответов

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

80
ответ дан 04.10.2019, 13:43

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

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

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

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

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

253
ответ дан 04.10.2019, 13:43
  • 1
    На самом деле, 3 пути: StAX (javax.xml.stream) является третьим стандартным. – StaxMan 23.04.2009, 18:00
  • 2
  • 3
    Chrome @kitokid говорит мне, что страница имеет противный материал на нем. Я использовал это вместо этого: sce.uhcl.edu/yue/courses/xml/notes/xmlparser/IntroDOM.asp – Ryan Shillington 18.12.2012, 07:56
  • 4
    Существует две причины, почему подход 2 является " right" способ сделать это в C++ 1. C++ представляет функторы, которые в некотором смысле расширяют идею указателей функции. 2. Библиотека потока Повышения проявляют подход 2 при реализации создания нового потока. – doron 22.10.2019, 02:23

В дополнение к SAX и DOM там STaX, анализирующий доступное использование XMLStreamReader, который является синтаксическим анализатором получения по запросу xml.

4
ответ дан 04.10.2019, 13:43
  • 1
    Интересно, какова реальная цель людей? Они знают Lua и хотят записать JavaScript, не имея необходимость изучать JavaScript? Им записали крупное приложение в Lua и хотят портировать его, чтобы быть веб-приложением с минимальной работой? Ни один из них не кажется вероятным мной – davr 02.10.2019, 18:18

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

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

1
ответ дан 04.10.2019, 13:43
  • 1
    Я don' t должен сделать Бобы Java, просто управлять необработанными элементами XML немного и рассмотреть определенные элементы для получения данных от них, таким образом, синтаксический анализатор стиля DOM является, вероятно, моим идеальным решением. – Evan 18.12.2008, 13:48
  • 2
    Да, dom4j, вероятно, был бы лучшим решением там... Я раньше использовал его в большой степени, пока я не пошел один уровень до систематизатора – Uri 18.12.2008, 18:03

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

2
ответ дан 04.10.2019, 13:43
  • 1
    Лучше, возможный: быстрее, очень вряд ли. – StaxMan 09.04.2009, 20:18
  • 2
    Чтобы быть более точным, в значениях JavaScript преобразовываются в их строковые представления прежде чем быть используемым в качестве ключей. Это может заставить проблемы начиная с его очень легкого заставлять вещи столкнуться: например, и номер 1 и строка " 1" имейте то же строковое представление и, по умолчанию, все объекты сериализируют к тому же " [возразите Объекту] " строка. Другое различие между таблицами JS и таблицами Lua - то, что, в то время как оба дают неопределенный / ноль при чтении неиспользованных ключей в Javascript, устанавливающем ключ к неопределенному, не удалит его из объекта (это все еще будет повторяемо, и hasOwnProperty возвратит true). – hugomg 02.10.2019, 18:17

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

3
ответ дан 04.10.2019, 13:43
  • 1
    Поздравления, можно использовать функцию в качестве ключа таблицы в JavaScript. Ваше мнение не кажется информированным. – tomdemuyt 02.10.2019, 18:17

Теги

Похожие вопросы