Хорошая утилита Java XML DOM

Я снова и снова пишу один и тот же подробный код манипулирования DOM:

Element e1 = document.createElement("some-name");
e1.setAttribute("attr1", "val1");
e2.setAttribute("attr2", "val2");
document.appendChild(e1);

Element e2 = document.createElement("some-other-name");
e.appendChild(e2);

// Etc, the same for attributes and finding the nodes again:
Element e3 = (Element) document.getElementsByTagName("some-other-name").item(0);

Теперь я не хочу переключать архитектуру все вместе, то есть я не хочу использовать JDOM, JAXB или что-то еще. Просто Java org.w3c.dom, Причины этого

  1. Речь идет о старой и большой устаревшей системе
  2. XML используется во многих местах, и XSLT несколько раз трансформировался для получения XML, HTML, PDF вывода
  3. Я просто ищу удобство, а не большие изменения.

Мне просто интересно, есть ли хорошая библиотека-обертка (например, с Apache Commons или Google), которая позволяет мне делать такие вещи в свободном стиле, похожем на jRTF:

// create a wrapper around my DOM document and manipulate it:
// like in jRTF, this code would make use of static imports
dom(document).add(
  element("some-name")
    .attr("attr1", "val1")
    .attr("attr2", "val2")
    .add(element("some-other-name")),
  element("more-elements")
);

а потом

Element e3 = dom(document).findOne("some-other-name");

Важное требование, которое у меня есть, заключается в том, что я хочу org.w3c.dom.Document тот

  1. уже существует
  2. довольно большой
  3. требуется немало манипуляций

Так преображение org.w3c.dom.Document в JDOM, dom4j и т. д. кажется плохой идеей. Я бы предпочел оборачивать его адаптерами.

Если он не существует, я мог бы свернуть свой собственный, так как этот синтаксис jRTF выглядит действительно хорошо! А для XML это кажется довольно простым для реализации, так как существует всего несколько типов узлов. Это может стать таким же мощным, как jquery, с точки зрения API!

3 ответа

Решение

Я нашел некоторые инструменты, которые примерно делают то, что я просил в моем вопросе:

Тем не менее, в то же время, я более склонен кататься самостоятельно. Я действительно большой поклонник jquery, и я думаю, что jquery может быть отображен на свободный API Java:

http://www.jooq.org/products/jOOX

Чтобы проработать мой комментарий, Dom4J приблизит вас к тому, что вы хотели:

final Document dom = DocumentHelper.createDocument().addElement("some-name")
        .addAttribute("attr1", "val1")
        .addAttribute("attr2", "val2")
        .addElement("some-other-name").getDocument();
System.out.println(dom.asXML());

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<some-name attr1="val1" attr2="val2"><some-other-name/></some-name>

Я знаю, что это не нативный DOM, но он очень похож и имеет очень хорошие функции для разработчиков Java (итераторы элементов, списки элементов и т. Д.)

Ну, это может быть глупо, но почему бы вам не реализовать этот маленький API самостоятельно? Я уверен, что вы достаточно хорошо знаете DOM API, и реализация того, что вы хотите, не займет много времени.

Кстати, рассмотрите возможность использования XPath для манипулирования документом (вы также можете реализовать свой mini-api поверх этого).

Другие вопросы по тегам