Abrir un fichero XML

Siendo la variable fichero la que hace referencia al fichero XML (como objeto File, String o InputStream), con estas instrucciones se obtiene en memoria el contenido completo del fichero XML:

DocumentBuilderFactory fábricaCreadorDocumento = DocumentBuilderFactory.newInstance();
DocumentBuilder creadorDocumento = fábricaCreadorDocumento.newDocumentBuilder();
Document documento = creadorDocumento.parse(fichero);

Si se desea obtener el contenido de un documento XML desde Internet, en lugar de la referencia al fichero que se hace al final, se debe usar algo como:

URL dir = new URL("http://direccionDelFicheroXML");
Document documento = creadorDocumento.parse(dir.openStream());

A partir de ese momento, todas las acciones sobre el documento XML se deberán realizar sobre la variable documento de la clase Document de Java, que permite la gestión de documentos XML basándose en el modelo DOM.

Las clases DocumentBuilderFactory y DocumentBuilder se encuentran en el paquete javax.xml.parsers de Java, y la clase Document es del paquete org.w3c.dom, por lo que se requiere importar dichos paquetes para usar estas clases.

Mostrar o guardar el contenido de un documento XML

Para realizar cualquiera de esas operaciones, es necesario crear previamente un transformador al que se le indique el documento y el destino que se le va a dar.

TransformerFactory fábricaTransformador = TransformerFactory.newInstance();
Transformer transformador = fábricaTransformador.newTransformer();
Source origen = new DOMSource(documento);

El objeto transformador que se ha creado dispone de un método transform que permite realizar el volcado del documento que se encuentra en memoria o otro formato. Se deben indicar dos parámetros: el primero es el documento de origen, y el segundo puede ser un objeto Result, en el que se obtendrá el resultado de la transformación. Para obtener un objeto Result se puede crear un objeto de la clase StreamResult indicando como parámetro un objeto File, OutpuStream, String o Writer.

Por ejemplo, para obtener el resultado en un fichero llamado salida.xml:

Result destino = new StreamResult("salida.xml");
transformador.transform(origen, destino);

Si por el contrario, se desea obtener el resultado en la salida estándar:

Result destino = new StreamResult(System.out);
transformador.transform(origen, destino);

Para obtener el contenido como String, y mostrarlo en la salida estándar:

StringWriter writer = new StringWriter();
Result destino = new StreamResult(writer);
transformador.transform(origen, destino);
System.out.println(writer.toString());

Crear un documento XML en blanco

Las clases DocumentBuilderFactory y DocumentBuilder permiten la generación de un documento XML vacío almacenándolo en memoria. Para ello se debe utilizar el método newDocument() de esa última clase:

DocumentBuilderFactory fábricaCreadorDocumento = DocumentBuilderFactory.newInstance();
DocumentBuilder creadorDocumento = fábricaCreadorDocumento.newDocumentBuilder();
Document documento = creadorDocumento.newDocument();

Si se muestra el contenido del objeto documento que se ha creado, se puede observar algo como lo siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

Métodos principales de la clase Document para obtener información

Element getDocumentElement()

Obtiene el elemento raíz del documento.

NodeList getElementsByTagName(String etiqueta)

Retorna una lista NodeList con todos los elementos del documento que tienen la etiqueta indicada. Puedes encontrar información sobre los NodeList en el artículo Operaciones sobre nodos DOM XML en Java.

Ya que la clase Document es una subclase de la clase Node, además de estos métodos propios, se pueden utilizar los métodos de la clase Node que se han comentado también en Operaciones sobre nodos DOM XML en Java.

Métodos principales de la clase Document para crear nodos

Los siguientes métodos de la clase Document permiten la creación de cada uno de los posibles tipos de nodos admitidos por XML:

Attr createAttribute(String name)
CDATASection createCDATASection(String data)
Comment createComment(String data)
DocumentFragment createDocumentFragment()
Element createElement(String tagName)
EntityReference createEntityReference(String name)
ProcessingInstruction createProcessingInstruction(String target, String data)
Text createTextNode(String data)