在Java中以编程方式创建W3C DOM的有效方法是什么?

时间:2008-12-04 17:40:10

标签: java xml dom

虽然我知道如何使用DOM API构建DOM这种漫长而艰巨的方式,但我想做一些比这更好的事情。是否有一种漂亮,整洁的方式来构建分层文档,例如,一个像Hibernate的Criteria API一样工作的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本身不比我生成的文档长四倍的东西。它存在吗?

4 个答案:

答案 0 :(得分:4)

您肯定想使用JDomhttp://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手册中,看起来他所做的演员表并不是必需的。也许他只是出于文档目的而做了。

答案 1 :(得分:2)

我强烈推荐Elliotte Rusty Harold的XOM API。

它与W3C API互操作,因为您可以在XOM和DOM之间进行转换。 API始终保证结构良好。它性能高,功能强大,遵循一致的设计原则。

答案 2 :(得分:0)

尝试查看DOM4J的Quick Start指南。这使得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;
    }
}

答案 3 :(得分:0)

如果您愿意在Java应用程序中使用Groovy,可以使用MarkupBuilder for Agile XML creation