Какую библиотеку Java XML вы рекомендуете (вместо dom4j)?

Я ищу что-то вроде dom4j, но без бородавок dom4j, таких как плохая или отсутствующая документация и, казалось бы, застопорившийся статус разработки.

Предыстория: я использовал и защищал dom4j, но не чувствую себя полностью правым, потому что я знаю, что библиотека далека от оптимальной (пример: посмотрите, как документированы методы в классе таблиц стилей, связанных с XSLT; что вы передадите для запуска () как String mode параметр?)

Требования: библиотека должна сделать базовую обработку XML проще, чем при использовании чистого JDK (javax.xml а также org.w3c.dom пакеты). Вещи как это:

  • Считайте XML-документ (из файла или строки) в объект, легко просматривайте и манипулируйте DOM, выполняйте запросы XPath и запускайте XSLT для него.
  • Создайте XML-документ в своем коде Java, добавьте элементы, атрибуты и данные и, наконец, запишите документ в файл или строку.

Мне действительно нравится то, что обещает dom4j: " простая в использовании библиотека с открытым исходным кодом для работы с XML, XPath и XSLT [...] с полной поддержкой DOM, SAX и JAXP". А готовящийся к выпуску dom4j 2.0 действительно исправляет все: полностью использовать Java 5 и добавить недостающую документацию. Но, к сожалению, если вы посмотрите ближе:

Предупреждение: dom4j 2.0 находится в пре-альфа-стадии. Вероятно, это не может быть скомпилировано. В случае, если он может быть скомпилирован случайным образом, скорее всего, он не сможет работать. В случае, если он запускается время от времени, он может внезапно взорваться. Если вы хотите использовать dom4j, вам нужна версия 1.6.1. В самом деле.

... и веб-сайт сказал это в течение долгого времени. Так есть ли хорошая альтернатива dom4j? Пожалуйста, предоставьте некоторые обоснования для предпочитаемой вами библиотеки, а не просто добавляйте имена и ссылки.:-)

11 ответов

Конечно, XOM:-)

XOM разработан, чтобы быть простым в освоении и использовании. Это работает очень прямо, и имеет очень мелкую кривую обучения. Предполагая, что вы уже знакомы с XML, вы сможете очень быстро приступить к работе с XOM.

Я использую XOM уже несколько лет, и мне все еще очень нравится. Простой в использовании, множество документации и статей в Интернете, API не меняется между выпусками. 1.2 был выпущен недавно.

XOM является единственным XML API, который не ставит под угрозу правильность. XOM принимает только правильно сформированные XML-документы пространства имен и позволяет создавать только правильно сформированные XML-документы пространства имен. (На самом деле, это немного строже, чем это: на самом деле это гарантирует, что все документы имеют возможность многократного использования и имеют четко определенные инфо-наборы XML.) XOM управляет вашим XML, поэтому вам не нужно этого делать. С XOM вы можете сосредоточиться на уникальной ценности вашего приложения и доверять XOM, чтобы получить правильный XML.

Посетите веб-страницу http://www.xom.nu/, где вы найдете ответы на часто задаваемые вопросы, кулинарную книгу, обоснование дизайна и т. Д. Если бы все было разработано с такой большой любовью:-)

Автор также написал о том, что не так с XML API (и как их исправить). (В основном, причины, по которым XOM существует в первую очередь)

Вот также интервью с автором из 5 частей Artima о XOM, где они рассказывают о том, что не так с XML API, The Good, the Bad и DOM, обзор дизайна JDOM, уроки, извлеченные из JDOM, и, наконец, принципы проектирования и XOM.

Тот, что встроен в JDK... с несколькими дополнениями.

Да, это болезненно использовать: он смоделирован по спецификациям W3C, которые были четко разработаны комитетом. Тем не менее, он доступен везде, и если вы остановитесь на нем, вы не столкнетесь с аргументами "мне нравится Dom4J", "мне нравится JDOM", "мне нравится StringBuffer", которые поступают из сторонних библиотек. Тем более что такие аргументы могут превращаться в разные куски кода с использованием разных библиотек...

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

Я использовал XMLTool для замены Dom4j, и он работает довольно хорошо.

Инструмент XML использует шаблон интерфейса Fluent для упрощения манипуляций с XML:

XMLTag tag = XMLDoc.newDocument(false)
   .addDefaultNamespace("http://www.w3.org/2002/06/xhtml2/")
   .addNamespace("wicket", "http://wicket.sourceforge.net/wicket-1.0")
   .addRoot("html")
   .addTag("wicket:border")
   .gotoRoot().addTag("head")
   .addNamespace("other", "http://other-ns.com")
   .gotoRoot().addTag("other:foo");
System.out.println(tag.toString());

Это сделано для Java 5, и легко создать итерируемый объект для выбранных элементов:

for (XMLTag xmlTag : tag.getChilds()) {
   System.out.println(xmlTag.getCurrentTagName());
}

Мне всегда нравился JDOM. Это было написано, чтобы быть более интуитивным, чем анализ DOM (и SAX-анализ всегда кажется неуклюжим в любом случае).

Из миссии:

Нет никаких веских причин для API Java манипулировать XML, чтобы он был сложным, хитрым, не интуитивно понятным или причинял боль. JDOMTM ориентирован как на Java, так и на Java. Он ведет себя как Java, он использует коллекции Java, он является абсолютно естественным API для современных разработчиков Java и предоставляет недорогую точку входа для использования XML.

Это был мой опыт - довольно интуитивная навигация по деревьям узлов.

Я использую XStream, его простую библиотеку для сериализации объектов в XML и обратно.

он может быть основан на аннотациях (например, JAXB), но у него очень простой и удобный API, и вы даже можете генерировать JSON.

Я добавлю к встроенному ответу @kdgregory, сказав, почему не JAXB?

С несколькими аннотациями довольно легко моделировать большинство документов XML. Я имею в виду, что вы, вероятно, собираетесь разобрать материал и положить объект правильно?

JAXB 2.0 встроен в JDK 1.6 и, в отличие от многих других встроенных библиотек javax, он довольно хорош (Kohusuke работал над этим, так что вы знаете его хорошо).

В одном из недавних проектов мне пришлось немного разобрать XML, и в итоге я использовал Simple Framework, рекомендованный коллегой.

Я был вполне доволен этим в конце концов. Он использует основанный на аннотациях подход отображения элементов и атрибутов XML на классы и поля Java.

<example>
  <a>
    <b>
      <x>foo</x>
    </b>
    <b>
      <y>bar</y>
    </b>
  </a>
</example>

Соответствующий код Java:

@Root
public class Example {

   @Path("a/b[1]")
   @Element
   private String x;

   @Path("a/b[2]")
   @Element
   private String y;
}

Все это сильно отличается от dom4j или XOM. Вы избегаете писать глупый, неуклюжий код обработки XML, но сначала вы, вероятно, некоторое время стучите головой о стену, пытаясь получить правильные аннотации.

(Это я задавал этот вопрос 4 года назад. Хотя XOM кажется достойной и довольно популярной заменой dom4j, я не смог полностью принять его. Любопытно, что никто не упомянул здесь Simple Framework. Я решил это исправить, как я, вероятно, использовал бы это снова.)

В нашем проекте мы используем http://www.castor.org/ но только для небольших файлов XML. Его действительно легко изучить, ему нужен просто файл сопоставления XML (или его нет, если теги XML полностью соответствуют атрибутам класса), и все готово. Он поддерживает слушателей (например, обратные вызовы) для выполнения дополнительной обработки. Минусы: это не стандарт Java EE, как JAXB.

Для создания XML-документов я предлагаю xmlenc. Используется в Кассандре.

Я иногда использую Jericho, который в первую очередь является HTML-парсером, но может анализировать любую XML-подобную структуру.

Конечно, это только для самых простых операций XML, таких как поиск тегов с заданным именем, итерация по структуре, замена тегов и их атрибутов, но разве это не самый распространенный вариант использования?

Вы можете попробовать JAXB с аннотациями, которые очень удобны и просты: Java Architecture для XML Binding.

Другие вопросы по тегам