Extraer datos de un xml con jsp
Necesito sacar cierta información de un archivo xml basico como este:
<?xml version="1.0" encoding="UTF-8" ?>
- <ventas>
- <datosRegistrador>
<numeroRUC>0992145900001</numeroRUC>
</datosRegistrador>
- <datosVentas>
- <venta>
<rucComercializador>1213213131313</rucComercializador>
<numeroCAMV_CPN>311</numeroCAMV_CPN>
<serialVin>9BFUT35F558678362</serialVin>
<nombrePropietario>MARIO FERNANDO VERGARA BUITRON</nombrePropietario>
<tipoIdentificacionPropietario>C</tipoIdentificacionPropietario>
<numeroDocumentoPropietario>1703470631</numeroDocumentoPropietario>
<tipoComprobante>2</tipoComprobante>
<establecimientoComprobante>31</establecimientoComprobante>
<puntoEmisionComprobante>1</puntoEmisionComprobante>
<numeroComprobante>13</numeroComprobante>
<numeroAutorizacion>133</numeroAutorizacion>
<fechaCompra>30-09-2005</fechaCompra>
<precioVenta />
<codigoCantonMatriculacion>null</codigoCantonMatriculacion>
- <datosDireccion>
<tipoDireccion>Residencia</tipoDireccion>
<calle>131</calle>
<numero>3131</numero>
<interseccion>313</interseccion>
</datosDireccion>
- <datosTelefono>
<tipoTelefono>FIJO</tipoTelefono>
<provincia>Galapagos</provincia>
<numero>2851-360</numero>
</datosTelefono>
</venta>
</datosVentas>
</ventas>
desde una pagina jsp, para poder mostrarlos como lo puedo hacer, ayudenme, por favor!!!!!!!
<?xml version="1.0" encoding="UTF-8" ?>
- <ventas>
- <datosRegistrador>
<numeroRUC>0992145900001</numeroRUC>
</datosRegistrador>
- <datosVentas>
- <venta>
<rucComercializador>1213213131313</rucComercializador>
<numeroCAMV_CPN>311</numeroCAMV_CPN>
<serialVin>9BFUT35F558678362</serialVin>
<nombrePropietario>MARIO FERNANDO VERGARA BUITRON</nombrePropietario>
<tipoIdentificacionPropietario>C</tipoIdentificacionPropietario>
<numeroDocumentoPropietario>1703470631</numeroDocumentoPropietario>
<tipoComprobante>2</tipoComprobante>
<establecimientoComprobante>31</establecimientoComprobante>
<puntoEmisionComprobante>1</puntoEmisionComprobante>
<numeroComprobante>13</numeroComprobante>
<numeroAutorizacion>133</numeroAutorizacion>
<fechaCompra>30-09-2005</fechaCompra>
<precioVenta />
<codigoCantonMatriculacion>null</codigoCantonMatriculacion>
- <datosDireccion>
<tipoDireccion>Residencia</tipoDireccion>
<calle>131</calle>
<numero>3131</numero>
<interseccion>313</interseccion>
</datosDireccion>
- <datosTelefono>
<tipoTelefono>FIJO</tipoTelefono>
<provincia>Galapagos</provincia>
<numero>2851-360</numero>
</datosTelefono>
</venta>
</datosVentas>
</ventas>
desde una pagina jsp, para poder mostrarlos como lo puedo hacer, ayudenme, por favor!!!!!!!
Hola amigo,
Yo tube que hacer una pequeña aplicación también en jsp que tenia que leer datos de configuración de un archivo xml. Para hacer esto yo me implemente una clase XmlLoad que se ocupaba de cargar los datos del archivo xml. Posteriormente me hice una clase (JabaBean) que utilizaba la clase XmlLoad para recuperar los datos y la página jsp utilizaba este jababean para mostrar la información.
El archivo xml mio sigue la siguiente estructura:
<atopeite>
<search id=\\\"terra\\\" name=\\\"Google\\\">
<address>http://buscador.terra.es/Default.aspx</address>
<param id=\\\"query\\\" name=\\\"query\\\"/>
<param id=\\\"lang\\\" name=\\\"ca\\\"/>
<param id=\\\"others\\\" name=\\\"source=Search\\\"/>
<languages>
<lang id=\\\"spanish\\\" value=\\\"e\\\"/>
<lang id=\\\"english\\\" value=\\\"s\\\"/>
</languages>
<calification>30</calification>
<parser>atopeite.app.TerraParser</parser>
</search>
<search id=\\\"msn\\\" name=\\\"MSN Search\\\">
<address>http://search.msn.com/results.aspx</address>
<param id=\\\"query\\\" name=\\\"q\\\"/>
<param id=\\\"lang\\\" name=\\\"lf\\\"/>
<param id=\\\"others\\\" name=\\\"FORM=QBHP\\\"/>
<languages>
<lang id=\\\"spanish\\\" value=\\\"1\\\"/>
<lang id=\\\"english\\\" value=\\\"0\\\"/>
</languages>
<calification>20</calification>
<parser>atopeite.app.MSNSearchParser</parser>
</search>
</atopeite>
A continuación la clase XmlLoad es algo asÃ:
En el constructor se crea e inicializa el árbol DOM que cargará los datos en memoria para posteriormente procesarlos.
public XMLLoad()
throws AppException
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
try
{
DocumentBuilder builder = factory.newDocumentBuilder();
File f = new File(\\\"./\\\");
doc = builder.parse(new File(f.getAbsolutePath() + CONF_FILE));
//Recupero el elemento raiz del árbol DOM asociado a la lista de usuarios
Element root = (Element)doc.getDocumentElement();
}
catch(SAXParseException spe){
// Error generated by the parser
System.out.println (\\\"\\\\n** Parsing error\\\"
+ \\\", line \\\" + spe.getLineNumber ()
+ \\\", uri \\\" + spe.getSystemId ());
System.out.println(\\\" \\\" + spe.getMessage() );
// Use the contained exception, if any
Exception x = spe;
if (spe.getException() != null)
x = spe.getException();
x.printStackTrace();
throw new AppException(\\\"Parsing error, line \\\" + spe.getLineNumber() +
\\\", \\\" + spe.getSystemId());
}
catch(ParserConfigurationException pce){
// Parser with specified options can\\\\'t be built
pce.printStackTrace();
throw new AppException(pce.getMessage() );
}
catch(SAXException sxe){
// Error generated by this application
// (or a parser-initialization error)
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
x.printStackTrace();
throw new AppException(sxe.getMessage());
}
catch(IOException ioe){
// I/O error
ioe.printStackTrace();
throw new AppException(ioe.getMessage());
}
}
A continuación yo en mi caso me hice una función que recorre todas las etiquetas con el nombre \\\"search\\\" y dentro de estas voy recuperando los valores de todos sus elementos. Para esto utilizo las siguientes funciones:
NodeList lista = doc.getElementsByTagName(\\\"search\\\");
Esta función nos devuelve una lista de nodos correspondientes a todas las etiquetas con el nombre mencionado existentes en el documentos.
Posteriormente recorro todos los nodos recuperados obteniendo todos los elementos de dichos nodos:
int n=lista.getLength();
for(int i=0; i<n; i++)
{
Node nodo = lista.item(i);
//Aquà pondrÃas el código del tratamiento del nodo actual
}
por si te hace falta para recuperar el valor de un nodo del tipo <nombrenodo>valor</nombrenodo>
nodo.getFirstChild().getNodeValue();
Para recuperar la lista de atributos de una etiqueta:
private Hashtable getAtributos(Node nodo)
{
NamedNodeMap attrs = nodo.getAttributes();
Hashtable table = new Hashtable();
int size = attrs.getLength();
for(int i=0;i<size;i++)
{
Node attr = attrs.item(i);
table.put(attr.getNodeName(),attr.getNodeValue() );
//System.out.println(\\\"Insertando parámetro: \\\" + attr.getFirstChild().getNodeValue() );
}
return table;
}
Bueno yo creo que con esto ya tienes para empezar con el tema del xml.
A continuación podrÃas hacerte una clase contenedora que invoque la clase anterior para cargar los datos del xml y crear la estructura adecuada:
public static Vector getSearchs()
throws AppException
{
if(searchs == null)
{
XMLLoad load = new XMLLoad();
searchs = load.getSearchs();
}
return searchs;
}
y por último desde el jsp se utlizarÃa de la siguiente manera:
<jsp:useBean id=\\\"container\\\" class=\\\"atopeite.app.SearchContainer\\\"/>
<table>
<tr>
<%
Vector searchs = container.getSearchs();
if(searchs != null)
{
int n = searchs.size();
for(int i=0;i<n;i++)
{
Search s = (Search)searchs.elementAt(i);
%>
<td><div class=\\\"n_navegador\\\">
<input type=\\\"checkbox\\\" name=\\\"<%=s.getId()%>\\\" checked><%=s.getName()%></div>
</td>
<%
}
}
else
{
%>
Lista de buscadores no disponible!!
<%
}
%>
</tr>
</table>
Bueno esto es todo, no se si es lo que querÃas o preferÃas algo mejor diseñado, de todas formas espero que te sirva de ayuda.
venga un saludo.
Yo tube que hacer una pequeña aplicación también en jsp que tenia que leer datos de configuración de un archivo xml. Para hacer esto yo me implemente una clase XmlLoad que se ocupaba de cargar los datos del archivo xml. Posteriormente me hice una clase (JabaBean) que utilizaba la clase XmlLoad para recuperar los datos y la página jsp utilizaba este jababean para mostrar la información.
El archivo xml mio sigue la siguiente estructura:
<atopeite>
<search id=\\\"terra\\\" name=\\\"Google\\\">
<address>http://buscador.terra.es/Default.aspx</address>
<param id=\\\"query\\\" name=\\\"query\\\"/>
<param id=\\\"lang\\\" name=\\\"ca\\\"/>
<param id=\\\"others\\\" name=\\\"source=Search\\\"/>
<languages>
<lang id=\\\"spanish\\\" value=\\\"e\\\"/>
<lang id=\\\"english\\\" value=\\\"s\\\"/>
</languages>
<calification>30</calification>
<parser>atopeite.app.TerraParser</parser>
</search>
<search id=\\\"msn\\\" name=\\\"MSN Search\\\">
<address>http://search.msn.com/results.aspx</address>
<param id=\\\"query\\\" name=\\\"q\\\"/>
<param id=\\\"lang\\\" name=\\\"lf\\\"/>
<param id=\\\"others\\\" name=\\\"FORM=QBHP\\\"/>
<languages>
<lang id=\\\"spanish\\\" value=\\\"1\\\"/>
<lang id=\\\"english\\\" value=\\\"0\\\"/>
</languages>
<calification>20</calification>
<parser>atopeite.app.MSNSearchParser</parser>
</search>
</atopeite>
A continuación la clase XmlLoad es algo asÃ:
En el constructor se crea e inicializa el árbol DOM que cargará los datos en memoria para posteriormente procesarlos.
public XMLLoad()
throws AppException
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
try
{
DocumentBuilder builder = factory.newDocumentBuilder();
File f = new File(\\\"./\\\");
doc = builder.parse(new File(f.getAbsolutePath() + CONF_FILE));
//Recupero el elemento raiz del árbol DOM asociado a la lista de usuarios
Element root = (Element)doc.getDocumentElement();
}
catch(SAXParseException spe){
// Error generated by the parser
System.out.println (\\\"\\\\n** Parsing error\\\"
+ \\\", line \\\" + spe.getLineNumber ()
+ \\\", uri \\\" + spe.getSystemId ());
System.out.println(\\\" \\\" + spe.getMessage() );
// Use the contained exception, if any
Exception x = spe;
if (spe.getException() != null)
x = spe.getException();
x.printStackTrace();
throw new AppException(\\\"Parsing error, line \\\" + spe.getLineNumber() +
\\\", \\\" + spe.getSystemId());
}
catch(ParserConfigurationException pce){
// Parser with specified options can\\\\'t be built
pce.printStackTrace();
throw new AppException(pce.getMessage() );
}
catch(SAXException sxe){
// Error generated by this application
// (or a parser-initialization error)
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
x.printStackTrace();
throw new AppException(sxe.getMessage());
}
catch(IOException ioe){
// I/O error
ioe.printStackTrace();
throw new AppException(ioe.getMessage());
}
}
A continuación yo en mi caso me hice una función que recorre todas las etiquetas con el nombre \\\"search\\\" y dentro de estas voy recuperando los valores de todos sus elementos. Para esto utilizo las siguientes funciones:
NodeList lista = doc.getElementsByTagName(\\\"search\\\");
Esta función nos devuelve una lista de nodos correspondientes a todas las etiquetas con el nombre mencionado existentes en el documentos.
Posteriormente recorro todos los nodos recuperados obteniendo todos los elementos de dichos nodos:
int n=lista.getLength();
for(int i=0; i<n; i++)
{
Node nodo = lista.item(i);
//Aquà pondrÃas el código del tratamiento del nodo actual
}
por si te hace falta para recuperar el valor de un nodo del tipo <nombrenodo>valor</nombrenodo>
nodo.getFirstChild().getNodeValue();
Para recuperar la lista de atributos de una etiqueta:
private Hashtable getAtributos(Node nodo)
{
NamedNodeMap attrs = nodo.getAttributes();
Hashtable table = new Hashtable();
int size = attrs.getLength();
for(int i=0;i<size;i++)
{
Node attr = attrs.item(i);
table.put(attr.getNodeName(),attr.getNodeValue() );
//System.out.println(\\\"Insertando parámetro: \\\" + attr.getFirstChild().getNodeValue() );
}
return table;
}
Bueno yo creo que con esto ya tienes para empezar con el tema del xml.
A continuación podrÃas hacerte una clase contenedora que invoque la clase anterior para cargar los datos del xml y crear la estructura adecuada:
public static Vector getSearchs()
throws AppException
{
if(searchs == null)
{
XMLLoad load = new XMLLoad();
searchs = load.getSearchs();
}
return searchs;
}
y por último desde el jsp se utlizarÃa de la siguiente manera:
<jsp:useBean id=\\\"container\\\" class=\\\"atopeite.app.SearchContainer\\\"/>
<table>
<tr>
<%
Vector searchs = container.getSearchs();
if(searchs != null)
{
int n = searchs.size();
for(int i=0;i<n;i++)
{
Search s = (Search)searchs.elementAt(i);
%>
<td><div class=\\\"n_navegador\\\">
<input type=\\\"checkbox\\\" name=\\\"<%=s.getId()%>\\\" checked><%=s.getName()%></div>
</td>
<%
}
}
else
{
%>
Lista de buscadores no disponible!!
<%
}
%>
</tr>
</table>
Bueno esto es todo, no se si es lo que querÃas o preferÃas algo mejor diseñado, de todas formas espero que te sirva de ayuda.
venga un saludo.