Эквивалент xml.etree.ElementTree в Java

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

Есть ли что-то подобное и простое в использовании в Java? Я нахожу модель DOM немного громоздкой и нахожу, что пишу гораздо больше кода, чем я хотел бы делать простые вещи.

Или я спрашиваю о неправильном?

Возможно, мой вопрос: есть ли лучший вариант, чем классы "XMLUtils", я вижу, как люди внедряют в некоторых местах, чтобы упростить свой код при работе с DOM?


Добавляем лит-бит здесь о том, почему мне нравится ElementTree, поскольку вопрос был задан.

  • Простота (я думаю, что что-то кажется простым после работы с DOM, хотя)
  • Чувствует себя естественным вписыванием в python
  • Требуется очень маленький код с моей стороны.

Я пытаюсь придумать простой пример кода, чтобы проиллюстрировать его, но это сложно сделать хорошим примером. Вот попытка, хотя. Это просто добавляет тег со значением и атрибутом к существующей строке xml.

from xml.etree.ElementTree import *
xml_string = '<top><sub a="x"></sub></top>'
parsed = fromstring(xmlstring)
se = SubElement(parsed, "tag")
se.text = "value"
se.attrib["a"] = "x"
new_xml_string = tostring(parsed)

После этого new_xml_string

<top><sub a="x" /><tag a="x">value</tag></top>

Не пример, который действительно охватывает все, но все же. Там также довольно простой цикл над тегами, когда вы хотите делать вещи, легко тестировать наличие тегов и атрибутов и другие вещи.

Ответ 1

Честно говоря, все XML-API в Java suck, вы просто можете варьировать уровень всасывания, который вы нажимаете на себя, что может стать ужасным/медленным для управляемых/достойных даже до неожиданности OK в разы.

Все это в основном связано с тем, что Java API пытались как можно более W3C DOM, фактически Xerces (актуальное Java-решение Java) гордится тем, что оно совместимо со всей связью спецификаций W3C, связанных с XML, как вы можете видеть на их первой странице.

Фактический API Xerces очень неприятен для работы, хотя из-за этого многие другие библиотеки Java XML вышли за эти годы. В настоящее время наиболее популярными являются

  • JDOM, упрощает операции DOM и я могу осмелиться сказать даже приятное время от времени, работает как шарм при смешивании с Jaxen - ну, если вы не нажмете эту проблему с пространствами имен.
  • XOM, в котором есть замечательная презентация о том, что неправильно с Java XML прямо сейчас, и как они предлагают свой способ делать вещи как решение. Частично это на самом деле лучше, чем JDOM, но оно недостаточно распространено, но поэтому не может действительно сказать, как оно себя ведет в реальном мире. Определенно стоит проверить хотя.
  • dom4j, хорошо округленная библиотека, поддерживает всевозможные важные функции и разыгрывается как "сквозное" решение для XML. dom4j в основном является "старым, проверенным и надежным" вариантом популярных.

Наконец, но не в последнюю очередь я просто хочу упомянуть StAX только потому, что он отличается, это фактически управляемый событиями потоковый API для XML. Определенно стоит посмотреть просто из любопытства.

PS. В настоящее время я фактически пишу свой собственный синтаксический анализатор XML/навигатор в качестве упражнения, но не решил, какой API он будет иметь. Я действительно стремлюсь к простоте использования, которая до сих пор кажется довольно редкой в ​​Java XML API, но я не совсем уверен, какой API я собираюсь предоставить. Python ElementTree кажется интересным, но, поскольку я не совсем знаком с ним, не могли бы вы дать краткое резюме о том, что именно в нем вы находите приятным?

Ответ 2

Вы можете изучить следующие варианты:

dom4j

xom

jdom

Так как я никогда не пользовался ElementTree, я не знаю, какой из них самый близкий. Если вы можете использовать Groovy внутри своего проекта, он предлагает набор классов, которые помогают при обработке XML.

Ответ 3

Мы находим XOM (http://www.xom.nu), чтобы обеспечить простую функциональность подкласса Element.

Ответ 4

Верно, что Java XML API не являются самыми большими с точки зрения удобства использования. Мои предпочтительные варианты: XOM, JDOM затем встроенный JAXP в этом порядке. Были некоторые неурядицы в отношении родного XML на языке (Начать вкладку с субтитрами продуктов Интеграция XML в язык программирования Java) как новый тип данных, но, похоже, застопорился.