#java #xml #xml-serialization
#java #xml #xml-сериализация
Вопрос:
Существует множество довольно хороших библиотек json, подобных GSon. Но для XML я знаю только Xerces / JDOM, и оба имеют утомительный API. Мне не нравится использовать ненужные объекты, такие как DocumentFactory, XpathExpressionFactory, NodeList и так далее. Итак, в свете встроенной поддержки xml в таких языках, как groovy / scala, у меня возник вопрос. Существует ли минималистичный java XML IO framework?
PS XStream / JAxB хорош для сериализации / десериализации, но в данном случае я ищу потоковую передачу некоторых данных в XML, например, с помощью XPath.
Ответ №1:
Модель W3C DOM неприятна и громоздка, я согласен. JDOM уже довольно прост. Единственный другой DOM API, о котором я знаю, который проще, — это XOM.
Комментарии:
1. Похоже, XOM — лучший вариант: потоковая передача минималистичный.
2. XOM нестабилен, и это LGPL.
3. @aviad: Он не нестабилен, он тверд как скала. Покажите мне доказательства обратного. И с каких это пор LGPL — это плохо?
Ответ №2:
Как насчет StAX? С Java 6 вам даже не нужны дополнительные библиотеки.
Ответ №3:
Dom4J потрясает. Это очень просто и понятно
Пример кода:
public static void main(String[] args) throws Exception {
final String xml = "<root><foo><bar><baz name="phleem" />"
"<baz name="gumbo" /></bar></foo></root>";
Document document = DocumentHelper.parseText(xml);
// simple collection views
for (Element element : (List<Element>) document
.getRootElement()
.element("foo")
.element("bar")
.elements("baz")) {
System.out.println(element.attributeValue("name"));
}
// and easy xpath support
List<Element> elements2 = (List<Element>)
document.createXPath("//baz").evaluate(document);
for (final Element element : elements2) {
System.out.println(element.attributeValue("name"));
}
}
Вывод:
флем
гумбо
флем
гумбо
Комментарии:
1. Действительно ли он минималистичен? Когда я импортировал его, у меня есть java.lang. Ошибка NoClassDefFoundError: org / jaxen / исключение JaxenException. После добавления jaxen было добавлено около 7 МБ зависимостей
Ответ №4:
попробуйте VTD-XML. Он почти в 3-4 раза быстрее, чем DOM-анализаторы с большим объемом памяти.
Ответ №5:
Зависит от того, насколько сложны ваши объекты Java: являются ли они самодостаточными и т.д. (например, узлы графа). Если ваши объекты просты, вы можете использовать Google gson — это самый простой API (IMO). В Xstream все становится запутанным, когда вам нужно отлаживать.Также вам нужно быть осторожным при выборе оригинального драйвера для XStream.
Ответ №6:
JDOM и XOM, вероятно, самые простые. DOM4J более мощный, но и более сложный. DOM просто ужасен. Обработка XML в Java всегда будет более сложной, чем обработка JSON, потому что JSON был разработан для структурированных данных, в то время как XML был разработан для документов, а документы более сложны, чем структурированные данные. Почему бы вместо этого не использовать язык, разработанный для XML, в частности XSLT или XQuery?
Ответ №7:
NanoXML очень маленький, менее 50 КБ. Я нашел это сегодня, и я действительно впечатлен.