Эквивалент xml.etree.ElementTree в Java - PullRequest
11 голосов
/ 02 ноября 2009

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

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

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

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


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

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

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

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

Ответы [ 4 ]

6 голосов
/ 02 ноября 2009

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

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

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

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

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

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

1 голос
/ 02 ноября 2009

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

1 голос
/ 02 ноября 2009

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

dom4j

XOM

JDOM

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

0 голосов
/ 02 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...