Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007. Twitter: @rcanalesmora
Autor del Libro: Informática profesional, las reglas no escritas para triunfar en la empresa
Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí
Regístrate para votar
XML y Java
En este tutorial os vamos a mostrar como manipular documentos XML desde Java y NetBeans. Al ser un concepto avanzado, simplemente mostramos como hacerlo ..... la teoría y base tecnológica para usuarios menos avanzados la publicaremos en otro tutorial.
Los documento XML en Java se manipulan a traves de dos tecnología llamadas DOM y SAX.
- Con DOM, creamos un objeto en memoria que representa el documento y tenemos los mecanismos para navegar por el .... como si fuera un arbol de elementos
- Con SAX realizamos una pasada por el documento y podemos definir que función se va lanzando según voy encontrando distintas etiquetas
Vamos a contruir un sistema que nos va a ayudar a definir el control del flujo de navegación de mis páginas..... a traves de las ayudas que nos proporiona NeTBeans ... procesamos el documento XML y mostramos su contenido . Nuestro programa real ..... sería muy parecido a estos pero con lógica especifica de nuestra problemática ....
Creamos un documento XML

Creamos automáticamente la DTD (Documento que define la estructura del documento XML)

Le asignamos un nombre

Ligamos nuestro documento a la DTD

Vemos que el sistema a añadido por nosostros la linea que liga a la DTD

Podemos ver la DTD que se ha creado

DOM
Podemos generar automáticamente un programa que cree un objeto DOM en memoria, a partir de la DTD.

Asignamos un nombre

Modificando un poquito el programa generado ...
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class LectorAccionesDTD {
/** org.w3c.dom.Document document */
Document document;
static void depura(String cadena)
{
System.out.println("Mensaje: " + cadena);
}
public static void main(String[] parametros)
{
try
{
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse (new InputSource("acciones.xml"));
LectorAccionesDTD scanner = new LectorAccionesDTD (document);
scanner.visitDocument();
}
catch(Exception e)
{
depura("Error de procesamiento");
e.printStackTrace();
}
}
/** Create new LectorAccionesDTD with org.w3c.dom.Document. */
public LectorAccionesDTD(org.w3c.dom.Document document) {
this.document = document;
}
/** Scan through org.w3c.dom.Document document. */
public void visitDocument() {
org.w3c.dom.Element element = document.getDocumentElement();
if ((element != null) && element.getTagName().equals("acciones")) {
depura("Visitamos Acciónes");
visitElement_acciones(element);
}
}
/** Scan through org.w3c.dom.Element named accion. */
void visitElement_accion(org.w3c.dom.Element element) { //
org.w3c.dom.NodeList nodes = element.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
org.w3c.dom.Node node = nodes.item(i);
switch (node.getNodeType()) {
case org.w3c.dom.Node.TEXT_NODE:
// ((org.w3c.dom.Text)node).getData();
depura("\tPrecondición: " + ((org.w3c.dom.Text)node).getData());
break;
}
}
}
}
|
La salida de este programa es:
Mensaje: Visitamos Acciónes Mensaje: Nombre Acción: Home Mensaje: Descripción: Pagina principal del sistema Mensaje: Precondición: all Mensaje: Nombre Acción: ListarProductos Mensaje: Descripción: Listado de distintos productos Mensaje: Precondición: Home Mensaje: Nombre Acción: DesalleProductos Mensaje: Descripción: Detalle de los componentes del producto Mensaje: Precondición: ListarProductos Mensaje: Nombre Acción: OrdenarProducto Mensaje: Descripción: Ordenar un productos Mensaje: Precondición: DesalleProductos |
En un programa normal .... creariamos el objetos o los objetos más simples que usariamos en nuestra aplicación
SAX
Otra utilidad que nos proporciona NetBeans es la posibilidad de crear un Parser Sax de nuestro documento

Definimos la versión

Definimos el nombre de las funciones SAX

Definimos los tipos de datos de cada area

Generamos en nombre de nuestras clases

Como podemos ver, se ha creado automáticamente el código necesario para gestionar a traves de un parser SAX nuesto fichero

Modificamos un poquito el código ...

Escribimos un main a nuestra clase AccionesDTDParser
public static void main(String [] array)
{
try
{
AccionesDTDParser parser = new AccionesDTDParser(new AccionesDTDHandlerImpl(),null);
parser.parse(new InputSource("acciones.xml"));
}
catch(Exception e)
{
e.printStackTrace();
}
}
|
Y en la clase que implementa las petiticones AccionesDTDHandlerImpl activamos las trazas
import org.xml.sax.*;
public class AccionesDTDHandlerImpl implements AccionesDTDHandler {
public static final boolean DEBUG = true;
public void start_accion(final AttributeList meta) throws SAXException {
if (DEBUG) System.err.println("start_accion: " + meta);
}
..... |
El resultado es:
start_acciones: org.xml.sax.helpers.XMLReaderAdapter$AttributesAdapter@fe64b9 start_accion: org.xml.sax.helpers.XMLReaderAdapter$AttributesAdapter@fe64b9 handle_desc: Pagina principal del sistema handle_pre: all end_accion() start_accion: org.xml.sax.helpers.XMLReaderAdapter$AttributesAdapter@fe64b9 handle_desc: Listado de distintos productos handle_pre: Home end_accion() start_accion: org.xml.sax.helpers.XMLReaderAdapter$AttributesAdapter@fe64b9 handle_desc: Detalle de los componentes del producto handle_pre: ListarProductos end_accion() start_accion: org.xml.sax.helpers.XMLReaderAdapter$AttributesAdapter@fe64b9 handle_desc: Ordenar un productos handle_pre: DesalleProductos end_accion() end_acciones() |
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.
Comentarios
-
2010-08-10 - 01:35:09optimuxgracias...muy explicativo, pero sabes cómo puedo leer un link con información xml desde java me?, gracias maestro
-
waldo2009-06-22 - 02:32:38 AMMe ha servido de mucho.... muchas gracias...
-
que te importa2006-12-15 - 01:01:15 AMEs un aco este pinche tutorial si se le puede decir tutorial, esta madre no trae nada interesante cuando publiquen algo q sea bueno por favor si no evitense poner estas pendejadas
-
Enrique Jopia2006-11-05 - 06:52:58 PMHola oy estudiante de ing. civil en informatica de la Usach en Santiago de Chile... vi tu tutorial y lo encontre bueno, aunque te recomiendo que pongas los archivos XML para descargar porque tuve que tomarme el tiempo de escribirlos...
-
Nestor I. Leon N.2006-06-05 - 10:53:41 PMesta muy bien el tutorial gracias por publicarlo me sirvio de mucho








