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

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

Справочная информация. Я использовал и выступая за dom4j, но не чувствую себя совершенно прав потому что я знаю, что библиотека далека от оптимальной (пример: посмотрите, как документируются методы в XSLT, связанные с Stylesheet, что бы вы прошли для запуска() в качестве параметра String mode?)

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

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

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

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

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

Ответ 1

Конечно, 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, Хорошее, плохое и DOM, Обзор дизайна JDOM, Уроки, извлеченные из JDOM и, наконец, Принципы проектирования и XOM.

Ответ 2

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

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

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

Ответ 3

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

Инструмент XML использует шаблон Fluent Interface для упрощения манипуляций с 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());
}

Ответ 4

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

Из заявления миссии:

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

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

Ответ 5

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

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

Ответ 6

Я добавлю встроенный ответ @kdgregory, говоря почему не JAXB?

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

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

Ответ 7

В недавнем проекте мне пришлось выполнить синтаксический разбор 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 здесь. Я решил исправить это, поскольку я, вероятно, буду использовать его снова.)

Ответ 8

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

Ответ 10

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

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

Ответ 11

Для создания XML documetns я предлагаю xmlenc. Он используется в cassandra.