2008-12-04 8 views
5

Aunque sé cómo construir un DOM de una manera larga y ardua usando DOM API, me gustaría hacer algo un poco mejor que eso. ¿Existe alguna manera ordenada de compilar documentos jerárquicos con, por ejemplo, una API que funcione de manera similar a la API de criterios de Hibernate? De modo que pueda cadena llama juntos de esta manera, por ejemplo:¿Cuál es una forma eficiente de crear un W3C DOM programáticamente en Java?

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")); 

Idealmente, esto resultaría en XML como esto:

<root> 
    <subnode> 
    <sub-subnode attr-name = "attr-value">some element text</sub-subnode> 
    <other_subnode /> 
</root> 

Básicamente, me gustaría algo donde el propio Java ISN' t casi cuatro veces más que el documento que estoy generando. ¿Existe?

Respuesta

4

Definitivamente desea utilizar JDom: http://www.jdom.org/docs/apidocs/. Se puede usar como lo describió, ya que muchos métodos devuelven una referencia al this. Aquí hay un código que nuestro maestro nos mostró para este documento XML. no lo he probado, pero el maestro es grande yo creo en él:

<adressbuch aktualisiert="1.4.2008"> 
    <adresse> 
     <vorname> Hugo </vorname> 
     <nachname> Meier </nachname> 
     <telefon typ="mobil">0160/987654 </telefon> 
    </adresse> 
</adressbuch> 

Código:

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")))); 

Desde el manual de API, parece que los moldes que no le son necassary. Tal vez solo lo hizo para fines de documentación.

2

Recomiendo Elliotte Rusty Harold's XOM API.

Interopera con la API W3C, en la que puede convertir entre XOM y DOM. La API garantiza una estructura bien formada en todo momento. Es eficiente, robusto y sigue principios de diseño consistentes.

0

Pruebe la guía Quick Start para DOM4J. También hace que sacar el XML sea bastante fácil. He incluido un fragmento relevante:

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