用Java编程创建W3CDOM的有效方法是什么?

用Java编程创建W3CDOM的有效方法是什么?,java,xml,dom,Java,Xml,Dom,虽然我知道如何使用domapi构建DOM,但我想做一些比这更好的事情。有没有一种好的、整洁的方法来构建层次化文档,比如说,使用一个类似Hibernate的CriteriaAPI的API?因此,我可以像这样将调用链接在一起,例如: Document doc = createDocumentSomehow (); doc.createElement ("root").createElements ( doc.newElement ("subnode") .createElem

虽然我知道如何使用domapi构建DOM,但我想做一些比这更好的事情。有没有一种好的、整洁的方法来构建层次化文档,比如说,使用一个类似Hibernate的CriteriaAPI的API?因此,我可以像这样将调用链接在一起,例如:

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本身不会比我生成的文档长近四倍。它存在吗?

我强烈推荐Elliotte Rusty Harold的API


它与W3CAPI交互操作,您可以在XOM和DOM之间进行转换。API保证在任何时候都具有良好的结构。它性能优良、健壮,并遵循一致的设计原则。

您肯定想使用
JDom
:。它可以按照您所描述的那样使用,因为许多方法都会返回对
this
的引用。下面是老师为我们展示的一些XML文档代码。我没试过,但老师很棒我相信他:

<adressbuch aktualisiert="1.4.2008">
    <adresse>
        <vorname> Hugo </vorname>
        <nachname> Meier </nachname>
        <telefon typ="mobil">0160/987654 </telefon>
    </adresse>
</adressbuch>
从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;
    }
}

如果您愿意在Java应用程序中使用Groovy,可以使用

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;
    }
}