Хорошая утилита 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
, Причины этого
- Речь идет о старой и большой устаревшей системе
- XML используется во многих местах, и XSLT несколько раз трансформировался для получения XML, HTML, PDF вывода
- Я просто ищу удобство, а не большие изменения.
Мне просто интересно, есть ли хорошая библиотека-обертка (например, с 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
тот
- уже существует
- довольно большой
- требуется немало манипуляций
Так преображение org.w3c.dom.Document
в JDOM, dom4j и т. д. кажется плохой идеей. Я бы предпочел оборачивать его адаптерами.
Если он не существует, я мог бы свернуть свой собственный, так как этот синтаксис jRTF выглядит действительно хорошо! А для XML это кажется довольно простым для реализации, так как существует всего несколько типов узлов. Это может стать таким же мощным, как jquery, с точки зрения API!
3 ответа
Я нашел некоторые инструменты, которые примерно делают то, что я просил в моем вопросе:
Тем не менее, в то же время, я более склонен кататься самостоятельно. Я действительно большой поклонник jquery, и я думаю, что jquery может быть отображен на свободный API Java:
Чтобы проработать мой комментарий, 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 поверх этого).