Каков эффективный способ создания W3C DOM программно на Java? - PullRequest
5 голосов
/ 04 декабря 2008

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

Ответы [ 4 ]

4 голосов
/ 04 декабря 2008

Вы определенно хотите использовать 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 похоже, что приведенные им броски не являются необходимыми. Может быть, он просто сделал это в целях документации.

2 голосов
/ 04 декабря 2008

Я настоятельно рекомендую API XOM Эллиотта Расти Гарольда.

Он взаимодействует с W3C API, так как вы можете конвертировать между XOM и DOM. API гарантирует правильную структуру в любое время. Он производительный, надежный и соответствует последовательным принципам проектирования.

0 голосов
/ 04 декабря 2008

Если вы хотите использовать Groovy в своем Java-приложении, вы можете использовать MarkupBuilder для гибкого создания XML .

0 голосов
/ 04 декабря 2008

Попробуйте взглянуть на руководство Quick Start для 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...