Какую библиотеку 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.
Ответ 9
вы можете попробовать JAXB, с аннотациями очень удобно и просто: Архитектура Java для привязки XML.
Ответ 10
Я иногда использую Jericho, который в основном является парсером HTML, но может анализировать любую XML-подобную структуру.
Конечно, это только для простейших операций XML, таких как поиск тегов с заданным именем, итерация по структуре, замена тегов и их атрибутов, но разве это не самые распространенные случаи?
Ответ 11
Для создания XML documetns я предлагаю xmlenc. Он используется в cassandra.