/*
Ejercicio: 2x4x01
Fecha: 08/10/2012
Enunciado:
1.- Realiza las siguientes tareas, a partir de la clase persona:
a) Crea un fichero "FichPersona.dat", que almacene varios objetos persona.
b) Tomando como base el fichero anterior, crea un documento XML usando DOM.
c) Implementa una clase que permita leer el documento XML del apartado anterior.
*/
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.io.*;
public class _2x4x01
{
// a) Crea un fichero "FichPersona.dat", que almacene varios objetos persona.
private static void creaFicheroDatosPersonas(String[] args) throws IOException
{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(args[0]), false));
oos.writeObject(new Persona("Pedro", 53));
oos.writeObject(new Persona("Juan", 26));
oos.writeObject(new Persona("Maria", 32));
oos.writeObject(new Persona("Laura", 19));
oos.close();
}
// b) Tomando como base el fichero anterior, crea un documento XML usando DOM.
private static void creaFicheroXMLPersonas(String[] args) throws IOException
{
FileInputStream fis = new FileInputStream(new File(args[0]));
ObjectInputStream ois = new ObjectInputStream(fis);
Persona perso;
try
{
// Crea la cabecera del fichero XML en memoria:
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().getDOMImplementation().createDocument(null, "personas", null);
document.setXmlVersion("1.0");
// Añade los objetos persona al XML:
while( fis.available() > 0 )
{
perso = (Persona)ois.readObject();
Element raiz = document.createElement("persona");
document.getDocumentElement().appendChild(raiz);
crearElemento("nombre", perso.getNombre(), raiz, document);
crearElemento("edad", String.valueOf(perso.getEdad()), raiz, document);
}
// Vuelca el XML a un fichero XML:
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document), new StreamResult(new java.io.File(args[1])));
}
catch( Exception e )
{
e.printStackTrace();
}
ois.close();
fis.close();
}
static void crearElemento(String datoEmple, String valor, Element raiz, Document document)
{
Element elem = document.createElement(datoEmple);
Text text = document.createTextNode(valor);
raiz.appendChild(elem);
elem.appendChild(text);
}
// c) Implementa una clase que permita leer el documento XML del apartado anterior.
public static void imprimirFicheroXMLPersonas(String[] args)
{
try
{
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(args[1]));
document.getDocumentElement().normalize();
System.out.println(document.getDocumentElement().getNodeName());
NodeList empleados = document.getElementsByTagName("persona");
for( int i = 0 ; i < empleados.getLength() ; i++ )
{
Node emple = empleados.item(i);
if( emple.getNodeType() == Node.ELEMENT_NODE )
{
Element elemento = (Element)emple;
System.out.print(" " + getNodo("nombre", elemento));
System.out.println(" \t" + getNodo("edad", elemento));
}
}
}
catch( Exception e )
{
System.err.println("Error: " + e);
}
}
private static String getNodo(String etiqueta, Element elem)
{
NodeList nodo = elem.getElementsByTagName(etiqueta).item(0).getChildNodes();
Node valorNodo = (Node)nodo.item(0);
return valorNodo.getNodeValue();
}
public static void main(String[] args) throws IOException
{
String[] argumentos = { "personas.dat", "personas.xml" };
creaFicheroDatosPersonas(argumentos);
creaFicheroXMLPersonas(argumentos);
imprimirFicheroXMLPersonas(argumentos);
}
}