Какой самый простой и минималистичный java xml api?

#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 КБ. Я нашел это сегодня, и я действительно впечатлен.