Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Java puede participar en la construcción de documentos XML. <%@ page contentType='text/xml' %>
<%@ page import="java.sql.*" %>
Normalmente mediante JSP (los guiones de servidor también
se pueden colocar en documentos XML): <?xml version="1.0" encoding="UTF-7"?>
<%
};
resultadoSelect.close();
select.close();
conexion.close();
}
catch(SQLException ex) {
out.println("Error: SQLException.");
}
catch( Exception ex) {
out.println("Error inesperado.");
}
%>
</bd>
bd.jsp
Análisis de un documento XML: extracción de su información. Permite indicar el código a ejecutar cada vez que se encuentra
un elemento mientras se analiza el documento XML.
Una vez que disponemos de la información del documento XML
podemos hacer con ella lo que necesitemos.
Dos tecnologías Java para el análisis de documentos XML:
9 SAX: Simple API for XML.
9 DOM: Document Object Model.
Análisis de documentos XML con SAX Análisis de documentos XML con SAX
<TIENDA>
public void startElement(String uri, String nombre,
String cualificado, Attributes atr) <EQUIPO TIPO="Sobremesa" COLOR="Negro">
throws SAXException {
// Comienzo de un elemento XML <NOMBRE>FX300 UM</NOMBRE>
}
<PRECIO>
public void endElement(String uri, String nombre,
String cualificado) <PESETAS>166386</PESETAS>
throws SAXException {
// Final de un elemento XML <EUROS>1000</EUROS>
}
</PRECIO>
public void characters(char[] buf, int ini, int lon)
throws SAXException {
// Secuencia de caracteres Comienzo de elemento
}
} Secuencia de caracteres
Final de elemento
Análisis de documentos XML con SAX Análisis de documentos XML con SAX
public class Analiza extends DefaultHandler { public void endElement(String uri, String nombre, String cualificado)
private static Vector lista = new Vector(); throws SAXException {
private Elemento actual = null; if(actual != null && texto != null)
private String texto; actual.ponValor(texto.trim());
actual = null;
public Vector analiza(String archivo) { }
DefaultHandler handler = new Analiza();
SAXParserFactory fact = SAXParserFactory.newInstance(); public void characters(char[] buf, int ini, int lon)
try { throws SAXException {
SAXParser parser = fact.newSAXParser(); if(actual != null && texto != null) {
parser.parse(new File(archivo), handler); String valor = new String(buf, ini, lon);
} catch (Throwable t) { texto += valor;
t.printStackTrace(); }
} }
return lista; } Analiza.java
}
DocumentBuilder analiza el documento XML y genera el Document. public static void main(String argv[]) {
DocumentBuilderFactory factory =
javax.xml.parsers.DocumentBuilder DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse("Equipos.xml");
} catch ...
Tipo
El documento XML El árbol del documento (Document) Node Nombre
Valor
Para las listas de atributos, que también son nodos. Incluyendo atributos pero obviando el prólogo.
Hay que importar NamedNodeMap:
Algunos métodos de la clase NamedNodeMap: import org.w3c.dom.NamedNodeMap;
int getLength() Número de nodos en la lista
Node item(int) Nodo en la posición indicada public class DOM2 {
static Document document;
El documento XML a partir del árbol DOM El documento XML a partir del árbol DOM
...
} // main() NodeList hijos = nodo.getChildNodes();
for(int n = 0; n < hijos.getLength(); n++) {
public static void procesa(Node nodo) { Node hijo = hijos.item(n);
String nombre = ""; procesa(hijo);
if(nodo.getNodeType() == 1) { // Un elemento }
nombre = nodo.getNodeName(); if(nodo.getNodeType() == 1) { // Un elemento
System.out.print("<" + nombre); System.out.print("</" + nombre + ">");
if(nodo.hasAttributes()) { }
NamedNodeMap atributos = nodo.getAttributes(); }
for(int a = 0; a < atributos.getLength(); a++) { } // Clase DOM2
Node atr = atributos.item(a);
System.out.print(" " + atr.getNodeName() + "='"
+ atr.getNodeValue() + "'");
}
}
System.out.print(">");
}
else if(nodo.getNodeType() == 3) { // Texto
System.out.print(nodo.getNodeValue());
} DOM2.java
} // main()
public String valor(Node nodo) {
public DOMBD() { NodeList hijos = nodo.getChildNodes();
Node nodo = document; String v = new String();
procesa(nodo); for(int n = 0; n < hijos.getLength(); n++) {
try { Node hijo = hijos.item(n);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); if(hijo.getNodeType() == 3) v += hijo.getNodeValue();
Connection conexion = }
DriverManager.getConnection("jdbc:odbc:JDBC_EQUIPOS"); return v;
Statement stmt = conexion.createStatement(); }
for(int i = 0; i < lista.size(); i++) {
eq = (Equipo) lista.get(i); public void procesa(Node nodo) {
String sql = "INSERT INTO Equipos (Nombre, Tipo, Color, PrecioPts"; String nombre = "";
sql += ", PrecioEur, CPU, Velocidad, Memoria, Disco, Opciones) VALUES ("; if(nodo.getNodeType() == 1) { // Un elemento
sql += "'" + eq.nombre + "', '" + eq.tipo + "', '" + eq.color; if(nodo.getNodeName() == "EQUIPO") eq = new Equipo();
sql += "', " + eq.pesetas + ", " + eq.euros + ", '" + eq.cpu; else if(nodo.getNodeName()=="NOMBRE") eq.nombre=valor(nodo);
sql += "', " + eq.velocidad + ", " + eq.memoria + ", " + eq.disco; else if(nodo.getNodeName()=="PESETAS") eq.pesetas=valor(nodo);
sql += ", '" + eq.opciones + "')"; else if(nodo.getNodeName()=="EUROS") eq.euros=valor(nodo);
stmt.executeUpdate(sql); else if(nodo.getNodeName()=="MEMORIA") eq.memoria=valor(nodo);
} conexion.close(); else if(nodo.getNodeName()=="DISCO") eq.disco=valor(nodo);
} catch(Exception e) { else if(nodo.getNodeName()=="OPCIONES") eq.opciones=valor(nodo);
e.printStackTrace();
}
} // DOMBD()
Del documento XML a la base de datos DOMBD.java Del documento XML a la base de datos
if(nodo.hasAttributes()) {
NamedNodeMap atributos = nodo.getAttributes();
for(int a = 0; a < atributos.getLength(); a++) {
Node atr = atributos.item(a);
if(atr.getNodeName() == "TIPO") eq.tipo = atr.getNodeValue();
if(atr.getNodeName() == "COLOR") eq.color = atr.getNodeValue();
if(atr.getNodeName() == "CPU") eq.cpu = atr.getNodeValue();
if(atr.getNodeName() == "VELOCIDAD") eq.velocidad = atr.getNodeValue();
} } }
NodeList hijos = nodo.getChildNodes();
for(int n = 0; n < hijos.getLength(); n++) {
Node hijo = hijos.item(n);
procesa(hijo);
}
if(nodo.getNodeType() == 1) { // Un elemento
if(nodo.getNodeName() == "EQUIPO") lista.addElement(eq);
}
} // procesa()