2
« en: 04 de Enero 2016, 21:02 »
Muy buenas.
Resulta que he hecho un programa que genera un XML a través de los objetos que hay escritos en un fichero, hasta ahi todo bien pero resulta que el XML me lo genera en una única linea es decir no tiene estructura de árbol.
Código Java
public static void crearXML()
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation implementation = builder.getDOMImplementation();
Document ficheroXML = implementation.createDocument(null, "departamentos", null); //El elemento Raiz del documento es departamentos
ficheroXML.setXmlVersion("1.0"); //asigno la version del XML
Element raiz = ficheroXML.getDocumentElement();
try
{
File fichero = new File("Departamentos.dat"); //Cargamos el fichero a leer
FileInputStream sacarAfichero = new FileInputStream(fichero); //Crea el flujo de Entrada
ObjectInputStream leer = new ObjectInputStream(sacarAfichero);
Departamento depart;
//Por cada vuelta del bucle leeo un departamento y genero su correspondiente XML
while((depart = (Departamento)leer.readObject()) != null)
{
Element departamento = ficheroXML.createElement("departamento"); //Creo una etiqueta departamento con para cada uno
Element nombreDepartamento = ficheroXML.createElement("nombreDepartamento"); //Cada departamento tiene una etiqueta nombreDepartamento
Text textoNombreDepartamento = ficheroXML.createTextNode(depart.get_nombre()); //Genero su texto a partir del objeto leido del fichero
nombreDepartamento.appendChild(textoNombreDepartamento); //Inserto el texto en la etiqueta nombreDepartamento
departamento.appendChild(nombreDepartamento); //Inserto la etiqueta nombreDepartamento en la etiqueta departamento
Element idDepartamento = ficheroXML.createElement("idDepartamento"); //Cada departamento tiene una etiqueta idDepartamento
Text textoIdDepartamento = ficheroXML.createTextNode(Integer.toString(depart.get_identificador())); //Genero su texto a partir del objeto leido del fichero
idDepartamento.appendChild(textoIdDepartamento); //Inserto el texto en la etiqueta idDepartamento
departamento.appendChild(idDepartamento); //Inserto la etiqueta idDepartamento en la etiqueta departamento
Element localidadDepartamento = ficheroXML.createElement("localidadDepartamento"); //Cada departamento tiene una etiqueta localidadDepartamento
Text textoLocalidadDepartamento = ficheroXML.createTextNode(depart.get_localidad()); //Genero su texto a partir del objeto leido del fichero
localidadDepartamento.appendChild(textoLocalidadDepartamento); //Inserto el texto en la etiqueta localidadDepartamento
departamento.appendChild(localidadDepartamento); //Inserto la etiqueta localidadDepartamento en la etiqueta departamento
raiz.appendChild(departamento);//Inserto la etiqueta departamento a la etiqueta departamentos
}
}
catch(Exception e)
{
ficheroXML.normalizeDocument(); //Esto no se si deberia generar la estructura de arbol
Source source = new DOMSource(ficheroXML);
Result result = new StreamResult(new java.io.File("departamentos.xml"));
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(source, result);
}
}
catch(Exception e)
{
}
}
Y el resultado del XML es el siguiente:
Código XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><departamentos><departamento><nombreDepartamento>Marketing</nombreDepartamento<idDepartamento>1</idDepartamento><localidadDepartamento>Madrid</localidadDepartamento></departamento><departamento><nombreDepartamento>Compras</nombreDepartamento><idDepartamento>2</idDepartamento><localidadDepartamento>Barcelona</localidadDepartamento></departamento><departamento><nombreDepartamento>Ventas</nombreDepartamento><idDepartamento>3</idDepartamento><localidadDepartamento>Bilbao</localidadDepartamento></departamento><departamento><nombreDepartamento>Finanzas</nombreDepartamento><idDepartamento>4</idDepartamento><localidadDepartamento>Sevilla</localidadDepartamento></departamento><departamento><nombreDepartamento>Investigación</nombreDepartamento><idDepartamento>5</idDepartamento><localidadDepartamento>León</localidadDepartamento></departamento><departamento><nombreDepartamento>I+D</nombreDepartamento><idDepartamento>6</idDepartamento><localidadDepartamento>Londres</localidadDepartamento></departamento></departamentos>
Esta todo en una linea y quiero que tenga la estructura:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<departamentos>
<departamento>
<nombreDepartamento>Marketing</nombreDepartamento>
<idDepartamento>1</idDepartamento>
<localidadDepartamento>Madrid</localidadDepartamento>
</departamento>
</departamentos>
No se como conseguirlo use el método normalizeDocument(); que yo creía que me lo dejaría con ese formato pero nada no consigo nada con el, también he intentado meter yo los saltos de linea pero no he conseguido hacerlo funcionar, alguien me podría decir como conseguir ese formato?