Algo un poco más útil que leer un XML, es crear un clase en Java utilizando un archivo XSD para posteriormente instanciar u objecto utilizando un XML.
Mi archivo XSD es:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="MiClase"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute type="xs:string" name="Nombre"/> <xs:attribute type="xs:string" name="Apellido"/> <xs:attribute type="xs:short" name="Edad"/> <xs:attribute type="xs:dateTime" name="FechaNacimiento"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:schema>
Creamos la clase utilizando el comando xjc ubicado en el directo bin de JAVA_HOME:
xjc .exe MiClase.exe
Seguimos agregando, ahora la clase recién creada:
// // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 // See http://java.sun.com/xml/jaxb // Any modifications to this file will be lost upon recompilation of the source schema. // Generated on: 2014.08.27 at 12:30:00 PM CDT // package MiPaquete; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; import javax.xml.datatype.XMLGregorianCalendar; /** * Java class for anonymous complex type. * * The following schema fragment specifies the expected content contained within this class. * * * <complexType> * <simpleContent> * <extension base="<http://www.w3.org/2001/XMLSchema>string"> * <attribute name="Nombre" type="{http://www.w3.org/2001/XMLSchema}string" /> * <attribute name="Apellido" type="{http://www.w3.org/2001/XMLSchema}string" /> * <attribute name="Edad" type="{http://www.w3.org/2001/XMLSchema}short" /> * <attribute name="FechaNacimiento" type="{http://www.w3.org/2001/XMLSchema}dateTime" /> * </extension> * </simpleContent> * </complexType> **/ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "value" }) @XmlRootElement(name = "MiClase") public class MiClase { @XmlValue protected String value; @XmlAttribute(name = "Nombre") protected String nombre; @XmlAttribute(name = "Apellido") protected String apellido; @XmlAttribute(name = "Edad") protected Short edad; @XmlAttribute(name = "FechaNacimiento") @XmlSchemaType(name = "dateTime") protected XMLGregorianCalendar fechaNacimiento; /** * Gets the value of the value property. * * @return * possible object is * {@link String } * */ public String getValue() { return value; } /** * Sets the value of the value property. * * @param value * allowed object is * {@link String } * */ public void setValue(String value) { this.value = value; } /** * Gets the value of the nombre property. * * @return * possible object is * {@link String } * */ public String getNombre() { return nombre; } /** * Sets the value of the nombre property. * * @param value * allowed object is * {@link String } * */ public void setNombre(String value) { this.nombre = value; } /** * Gets the value of the apellido property. * * @return * possible object is * {@link String } * */ public String getApellido() { return apellido; } /** * Sets the value of the apellido property. * * @param value * allowed object is * {@link String } * */ public void setApellido(String value) { this.apellido = value; } /** * Gets the value of the edad property. * * @return * possible object is * {@link Short } * */ public Short getEdad() { return edad; } /** * Sets the value of the edad property. * * @param value * allowed object is * {@link Short } * */ public void setEdad(Short value) { this.edad = value; } /** * Gets the value of the fechaNacimiento property. * * @return * possible object is * {@link XMLGregorianCalendar } * */ public XMLGregorianCalendar getFechaNacimiento() { return fechaNacimiento; } /** * Sets the value of the fechaNacimiento property. * * @param value * allowed object is * {@link XMLGregorianCalendar } * */ public void setFechaNacimiento(XMLGregorianCalendar value) { this.fechaNacimiento = value; } }
Posteriormente, agregamos las clases:
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller;
Por último creamos el código:
JAXBContext jaxbContext = JAXBContext.newInstance(MiClase.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); byte[] xml = "<MiClase Nombre=\"Qbit\" Apellido=\"Mexhico\" Edad=\"0\" FechaNacimiento=\"2014-08-27T11:30:29\" />".getBytes(); MiClase miClase = (MiClase)unmarshaller.unmarshal( new ByteArrayInputStream( xml )); System.out.println("Mi nombre es: "+miClase.getNombre()); System.out.println("Mi apellido es: "+miClase.getApellido());