Saltar la navegación

1.2. Creación de documentos con DOM

Para la creación de un documento DOM y paso a un fichero XML, usaremos nodos de distintos tipos con algunos métodos de la interfaz Document.

Se usarán estos para crear los nodos y métodos de la interfaz Node para añadirlos al documento.

Element createElement(String nombreEtiqueta) // Crea nuevo elemento con el nombre dado

Text createTextNode(String texto) // Crea nuevo nodo de tipo texto

Los atributos se añaden con métodos de la interfaz Element.

void setAttribute(String name, String value) // Añade atributo con el valor dado

Los siguiente métodos de la interfaz Node, permiten añadir elementos a un documento DOM. Si ocurre algún error, lanzará una excepción de tipo DOMException.

Node appendChild(Node nuevohijo) // Añade nodo como último nodo hijo y devuelve el nodo añadido
Node insertBefore(Node nuevohijo, Node refHijo) // Añade nuevo hijo antes del indicado

Serializar un documento DOM

La clase Transformer permite serializar documentos DOM, es decir, generar un documento de texto XML a partir de ellos.

import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class CrearDocumentoDOM {
  public static void main(String[] argv) throws Exception {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    DOMImplementation impl = db.getDOMImplementation();
    Document doc = impl.createDocument(null, null, null);

    Element e1base = doc.createElement("clientes");
    doc.appendChild(e1base);
    
    Element e1 = doc.createElement("cliente");
    e1.setAttribute("DNI", "12345678Z");
    Element e1Apel = doc.createElement("apellidos");
    e1Apel.appendChild(doc.createTextNode("ROJAS"));
    e1.appendChild(e1Apel);
    Element e1Validez = doc.createElement("validez");
    e1Validez.setAttribute("estado","borrado");
    e1Validez.setAttribute("timeStamp", "1528286082");
    e1.appendChild(e1Validez);
    e1base.appendChild(e1);

    DOMSource domSource = new DOMSource(doc);
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");	// Omite la cabecera del XML
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    StringWriter sw = new StringWriter();
    StreamResult sr = new StreamResult(sw);
    transformer.transform(domSource, sr);
    System.out.println(sw.toString());
  }
}