Хотя я знаю, как построить DOM долгим и трудным способом с использованием DOM API, я хотел бы сделать что-то немного лучше этого. Есть ли приятный аккуратный способ создания иерархических документов, скажем, с помощью API, который работает как API критериев Hibernate? Чтобы я мог объединить вызовы в цепочку, например, так:
Document doc = createDocumentSomehow ();
doc.createElement ("root").createElements (
doc.newElement ("subnode")
.createElement ("sub-subnode")
.setText("some element text")
.addAttribute ("attr-name","attr-value"),
doc.newElement ("other_subnode"));
В идеале это должно было бы привести к такому XML:
<root>
<subnode>
<sub-subnode attr-name = "attr-value">some element text</sub-subnode>
<other_subnode />
</root>
В принципе, я бы хотел что-то, где сама Java почти в четыре раза длиннее, чем документ, который я создаю. Он существует?




Я настоятельно рекомендую XOM API Эллиотта Расти Гарольда.
Он взаимодействует с W3C API в том смысле, что вы можете конвертировать между XOM и DOM. API всегда гарантирует правильную структуру. Он производительный, надежный и следует последовательным принципам проектирования.
Вы определенно хотите использовать JDom: http://www.jdom.org/docs/apidocs/. Его можно использовать, как вы описали, поскольку многие методы возвращают ссылку на this. Вот код, который наш учитель показал нам для этого XML-документа. Не тестировал, но учитель отличный, верю в него:
<adressbuch aktualisiert = "1.4.2008">
<adresse>
<vorname> Hugo </vorname>
<nachname> Meier </nachname>
<telefon typ = "mobil">0160/987654 </telefon>
</adresse>
</adressbuch>
Код:
new Document(
new Element ("adressbuch")
.setAttribute("aktualisiert", "1.4.2008")
.addContent(
(Element) new Element("adresse")
.addContent(
(Element) new Element("vorname")
.addContent("Hugo"))
.addContent(
(Element) new Element("nachname")
.addContent("Meier"))
.addContent(
(Element) new Element("telefon")
.setAttribute("typ", "mobil")
.addContent("0160/987654"))));
Судя по руководству по API, слепки, которые он делал, не нужны. Может, он просто сделал это для документации.
Попробуйте посмотреть руководство Быстрый старт для DOM4J. Это также упрощает получение XML. Я включил соответствующий фрагмент:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Foo {
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "root" );
Element author1 = root.addElement( "author" )
.addAttribute( "name", "James" )
.addAttribute( "location", "UK" )
.addText( "James Strachan" );
Element author2 = root.addElement( "author" )
.addAttribute( "name", "Bob" )
.addAttribute( "location", "US" )
.addText( "Bob McWhirter" );
return document;
}
}
Если вы хотите использовать Groovy в своем приложении Java, вы можете использовать MarkupBuilder для создания Agile XML.