Яку бібліотеку Java XML ви рекомендуєте (замінити dom4j)? [зачинено]


76

Я шукаю щось на зразок dom4j, але без бородавок dom4j, таких як погана або відсутня документація та, здавалося б, застопорений статус розробки.

Довідкова інформація: Я використовував і виступаю за dom4j, але не вважаю його абсолютно правильним, оскільки знаю, що бібліотека далеко не оптимальна (приклад: подивіться, як документуються методи в класі стилів, пов’язані з XSLT ; що б ви передали для запуску ( ) як String modeпараметр?)

Вимоги: Бібліотека повинна спростити обробку базових XML, ніж при використанні чистого JDK ( javax.xmlі org.w3c.domпакетів). Такі речі:

  • Зчитуйте XML-документ (з файлу або рядка) в об'єкт, легко переходьте та маніпулюйте DOM, виконуйте запити XPath та запускайте XSLT проти нього.
  • Створіть XML-документ у коді Java, додайте елементи та атрибути та дані і, нарешті, запишіть документ у файл або рядок.

Насправді мені дуже подобається те, що обіцяє dom4j : « проста у використанні бібліотека з відкритим кодом для роботи з XML, XPath та XSLT [...] з повною підтримкою DOM, SAX та JAXP». А майбутній dom4j 2.0 справді вимагає виправити все : повністю використовувати Java 5 та додати відсутні документи. Але, на жаль, якщо придивитися уважніше :

Попередження: dom4j 2.0 знаходиться на стадії попередньої альфа-версії. Швидше за все, його неможливо скомпілювати. Якщо його можна скомпілювати випадковим чином, швидше за все, він не може працювати. Якщо він працює періодично, він може раптово вибухнути. Якщо ви хочете використовувати dom4j, вам потрібна версія 1.6.1. Дійсно.

... і на веб-сайті про це вже давно . Тож чи є хороша альтернатива dom4j? Будь ласка, надайте якесь обґрунтування вашої улюбленої бібліотеки, замість того, щоб просто скидати імена та посилання. :-)


6
Здається, вони втратили домен dom4j.org (можливо, ще один знак того, що насправді його слід чимось замінити ...) - веб-сайт все ще доступний за адресою dom4j.sourceforge.net .
Джонік

2
Перевірте ще кілька публікацій за темою: stackoverflow.com/questions/373833/best-xml-parser-for-java та stackoverflow.com/questions/25614/… . Також приємна примітка про jdom / dom4j / xom знаходиться тут: lists.xml.org/archives/xml-dev/200410/msg00492.html
dma_k

Ой, я щойно помітив, що нарешті вийшов альфа-версія dom4j 2.0: sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2 ( Хоча вони досі не відновили свій домен dom4j.org .) вийшов?
Йонік

@ vtd-xml. Ні, я не чув про це ... Подумайте над тим, щоб опублікувати повну відповідь про це, якщо ви вважаєте, що це хороша заміна dom4j, як викладено у запитанні
Jonik

Інший варіант - ви завжди можете допомогти команді dom4j зробити кращу dom4j. Візьміть виделку, зануртесь і подайте кілька латок.
Адам Гент,

Відповіді:


53

Звичайно, 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, де вони говорять про те, що не так із API XML , «Добрий, поганий» та «DOM» , «Огляд дизайну JDOM» , « Уроки, вивчені від JDOM» і, нарешті, « Принципи дизайну» та XOM .


XOM виглядає багатообіцяючим, особливо зважаючи на те, як його творець чітко знав існуючі бібліотеки та намагався вдосконалити їх. У порівнянні з dom4j та JDOM, він також видається дещо активнішим: останній реліз був у березні 2009 року (хоча той, що був до цього, був у серпні 2006 року). Я випробовую XOM днями, щоб перевірити, чи дійсно я можу використовувати його з подібною чи більшою легкістю, як dom4j.
Джонік

Гаразд, я тестував XOM (використовуючи Stack Overflow для забезпечення приємних невеликих проблем для вирішення: stackoverflow.com/questions/883987/… , stackoverflow.com/questions/428073/… , stackoverflow.com/questions/139076/ … Тощо :-), і я починаю переконувати, що я можу робити майже все, що можна з XOM, що я можу робити з dom4j!
Джонік

(продовження) Однак одна річ, у якій я сумніваюся, - це потокове передавання XML-даних, що я робив із dom4j раніше. Ось запитання, яке я про це писав, можливо, ви знаєте відповідь? stackoverflow.com/questions/967288/…
Джонік

11
Обережно. Перетворення dom4j / jdom на XOM - це біль у дупі. Крім того, API не підтримує колекції Java. І те, і інше дуже боляче.
Гілі,

4
Просто щоб додати свою думку, трохи попрацювавши з XOM. Безумовно, це краще, ніж JDOM. Але йому не вистачає деяких функцій цукру, які я хотів би бачити в XML API ( Element.setAttribute(name, value), Element.setText(string), шаблон відвідувач (див lists.ibiblio.org/pipermail/xom-interest/2010-March/004076.html ), поліпшена підтримка API StAX / Trax ), який має dom4j.
dma_k

18

Той, що вбудований в JDK ... з кількома доповненнями.

Так, це болісно використовувати: він змодельований за специфікаціями W3C, які були чітко розроблені комітетом. Однак він доступний де завгодно, і якщо ви зупинитесь на ньому, ви не натрапите на аргументи "Мені подобається Dom4J", "Мені подобається JDOM", "Мені подобається StringBuffer", які надходять із сторонніх бібліотек. Тим більше, що такі аргументи можуть перетворюватися на різні фрагменти коду за допомогою різних бібліотек ...

Однак, як я вже сказав, я дещо вдосконалююсь: Практична бібліотека XML - це сукупність класів утиліти, які полегшують роботу з DOM . Окрім обгортки XPath, тут немає нічого складного, лише купа процедур, які я переконував для кожного завдання.


2
Я згоден. Раніше я клявся JDom, але виявив, що коли я написав кілька допоміжних методів, речі JAX-P просто не складніші, і вони встановлені скрізь.
Дейв Рей

1
JAXB також вбудований і дуже приємний.
Адам Гент,

10

Я використовую XMLTool для заміни Dom4j, і він працює досить добре.

Інструмент XML використовує шаблон вільного інтерфейсу для полегшення маніпуляцій з 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());
}

Це виглядає приголомшливо, саме те, що мені потрібно для підтримки тестування на основі даних.
FDM

6

Мені завжди подобався jdom . Він був написаний для більш інтуїтивного розуміння, ніж синтаксичний аналіз DOM (а аналіз SAX завжди здається незграбним).

З місії:

Немає переконливої ​​причини, щоб API Java маніпулював XML складним, хитрим, неінтуїтивним або болем у шиї. JDOMTM одночасно орієнтований на Java та оптимізований для Java. Він поводиться як Java, використовує колекції Java, це цілком природний API для сучасних розробників Java і забезпечує недорогу точку входу для використання XML.

Це майже мій досвід - досить інтуїтивна навігація деревами вузлів.


Класно. Ви читали останнє речення мого запитання? ;-)
Джонік

+1 - простіше, ніж усі речі W3C.
duffymo

2
Нещодавно я використовував JDOM у проекті, і хоча API є інтуїтивно зрозумілим, у мене з ним дві проблеми: розробка, здається, зупинилася (останнє оновлення було в кінці 2007 року), а бібліотека ще не створена.
cdmckay

1
Якщо я вибираю JDOM проти XOM, я вибираю XOM.
dma_k

3
Схоже, щойно вийшов JDOM 2.0.0 : "2.0.0 вводить JDOM у світ загальних джерел та інших мовних елементів Java, представлених разом з Java 5."
Джонік

5

Я використовую XStream , його просту бібліотеку для серіалізації об’єктів у XML і назад.

він може керуватися анотаціями (як JAXB), але він має дуже простий і простий у використанні api, і ви навіть можете генерувати JSON.


Здається дуже просто. Просто цікаво, як це насправді працює: якщо я завантажую XML з Інтернету, як XStream знає, до якого класу його слід десеріалізувати?
ettore

@ettore ні. Вам слід використовувати JAXB для чогось подібного, оскільки він розуміє схему та WSDL.
Адам Гент,

1
Не є насправді альтернативою для XML API загального призначення, як dom4j. Це просто серіалізатор / десериалізатор, чи не так?
zehrer

3

Я додаю до вбудованої відповіді @kdgregory, сказавши, чому не JAXB?

За допомогою кількох анотацій досить легко моделювати більшість XML-документів. Я маю на увазі, що ви, мабуть, збираєтеся проаналізувати речі та вкласти об’єкт, чи не так?

JAXB 2.0 вбудовано в JDK 1.6, і на відміну від багатьох інших вбудованих бібліотек Javax, ця є досить непоганою (Кохусуке працював над нею, так що ви добре знаєте).


Цікаво, як JAXB 2.0 порівнюється із полегшеною XML-бібліотекою на основі анотацій, як Simple , з точки зору простоти та уникання шаблону ..? (Ще в той день, коли я поставив це запитання, я начебто взагалі пропустив JAXB, але, мабуть, я заслуговую на детальний розгляд, якщо потрібно робити XML з Java.)
Джонік,

3

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


1

У нашому проекті ми використовуємо http://www.castor.org/, але лише для невеликих файлів XML. Це дуже просто навчитися, для цього потрібен лише відображувальний файл XML (або жоден, якщо теги XML ідеально відповідають атрибутам класу), і все готово. Він підтримує слухачів (наприклад, зворотні дзвінки) для виконання додаткової обробки. Мінуси: це не стандарт Java EE, як JAXB.


Однак Кастор підтримує JAXB. І у вас є вибір: використовувати файл зіставлення або використовувати схему XML та генератор коду Кастора.
Едді

Я не знав, дякую за інформацію!
Lluis Martinez


0

Я іноді використовую Jericho , який є переважно синтаксичним аналізатором HTML, але може аналізувати будь-яку структуру, подібну до XML.

Звичайно, це стосується лише найпростіших XML-операцій, таких як пошук тегів із заданим іменем, ітерація структури, заміна тегів та його атрибутів, але чи це не найбільш випадки використання?


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.