Programación en castellano
-Tutoriales

El API JAXP


Examinar la Estructura de un DOM

En esta página usaremos la aplicación GUI DomEcho que hemos creado en la página anterior para examinar visualmente un DOM. Veremos los nodos que componen el DOM, y como están distribuidos. Con el entendimiento adquirido, estaremos bien preparados para construir y modificar estructuras DOM en el futuro.

. Mostrar un Árbol Sencillo

Empezaremos mostrando un sencillo fichero, para obtener una ídea de la estructura básica de un DOM. Luego veremos la estructura que resulta cuando incluimos elementos XML más avanzados.

Nota:

El código usado para crear las figuras de esta sección está en DomEcho02.java. El fichero mostrado es slideSample01.xml.

La figura 1 muestra el árbol que veremos cuando ejecutemos el programa DomEcho sobre el primer fichero XML que creamos en el tutorial DOM.

Recuerda que el primer texto mostrado para cada nodo es el tipo del elemento. Después viene el nombre del elemento, si existe, y luego el valor del elemento. Estas vistas muestran tres tipos de elementos: Document, Comment, y Element. Hay sólo un tipo de documento para todo el árbol -- es el nodo raíz. El nodo comentarios muestra el atributo valor, mientras que el nodo Elemento muestra el nombre del elemento, "slideshow".

Nota:

Los diferentes tipos de nodos, sus propiedades y los métodos usados para acceder a ellos están documentados en el interface org.w3c.dom.Node.

Si expandimos el elemento SlideShow veremos la ventana de la figura 2:

Aquí podemos ver los nodos Text y Comment que se ha interpuesto entre elementos Slide. Los nodos de texto vaciós existen porque no hay DTD que le diga al analizador que no existe texto. (Generalmente, la gran mayoría de nodos en un DOM serán nodos Element y Text).

Una notable ausencia de esta imagen son los nodos Attribute. Una inspección de la tabla org.w3c.dom.Node muestra que de echo hay un tipo de nodo atributo. Pero no están incluidos como hijos en el árbol DOM. Se obtienen mediante el método getAttributes del interface Node.

Nota:

Mostrar los nodos de texto es la razón para incluir las siguientes líneas en el método toString de AdapterNode. Si las eliminamos veremos algunos caracteres extraños que se generan por los caracteres de nueva línea que hay en el texto.

String t = domNode.getNodeValue().trim();
int x = t.indexOf("\n");
if (x >= 0) t = t.substring(0, x);
s += t; 

. Mostrar un Árbol más Complejo

Aquí veremos el fichero XML de ejemplo que creamos al final de tutorial de SAX, para ver como aparecen en el DOM las referencias a entidades, las intrucciones de procesamiento, y las secciones CDATA.

Nota:

El fichero mostrado en esta sección es slideSample10.xml.

La figura 3 muestra el resultado de ejecutar la aplicación DomEcho sobre slideSample10.xml, que incluye una entrada DOCTYPE que identifica el DTD del documento.

El interface DocType es realmente una extensión de w3c.org.dom.Node. Define un método getEntities que usaremos para obtener nodos de Entidad -- los nodos que definen entidades. Al igual que los nodos Atributo, los nodos Entidad no aparecen como hijos de lo nodos DOM.

Cuando expandimos el nodo slideshow podemos ver la imagen de la figura 4.

Aquí, está iluminado el nodo de Instrucción de Procesamiento, mostrando que estos nodos si aparecen en el árbol. La propiedad name contiene la especificación-fuente que identifica la aplicación a la que va dirigida la instrucción. La propiedad value contiene el texto de la instrucción.

Observa que los nodos de texto vacíos tambien se ven aquí, aunque el DTD especifique que un slideshow sólo puede contener elementos slide, nunca texto. Lógicamente, podríamos pensar que estos nodos no aparecerían. (Cuando este fichero fue analizado por SAX, estos elementos generaron eventos ignorableWhitespace, en vez de eventos character.

Los elementos de texto vacíos son incluidos porque por defecto, DocumentBuilder crea un DOM que incluye toda la información léxica necesaria para reconstruir el documento original, y en su forma original. Esto incluye los nodos comentarios así como los nodos de texto. Todavía no hay ningún mecanismo estándard para eliminar dicha información léxica del DOM por eso tenemos que dejarlo con su estructura lógica.

Nota:

La clase XmlDocumentBuilder de la implementación de referencia define el método setIgnoringLexicalInformation para este propósito.

Nos movemos hacia el segundo elemento slide y abrimos el elemento item que nos mostrará la imagen de la figura 5.

Aquí, está iluminado el nodo de Referencia de Entidad. Observamos que contiene muchos nodos bajo él. Este ejemplo sólo muestra los nodos de texto y de comentario, pero la entidad podría contener otros nodos elementos.

Nos movemos hasta el último elemento item bajo el último slide y podremos ver la imagen de figura 6.

Aquí está iluminado el nodo CDATA. Observa que no hay nodos debajo de él. Como la sección CDATA no se interpreta, todos sus contenidos están en la propiedad value del nodo.

. Finalizando

En este punto, hemos visto muchos de los nodos que podremos encontrar en un árbol DOM. Existen uno o dos más que mencionaremos en la siguiente página, pero ahora sabemos lo que necesitamos para crear o modificar una estructura DOM. En la siguiente página, veremos como convertir un DOM en un JTree con el que se pueda interactuar. O, si lo prefieres, puedes saltar a la sección posterior del turorial, donde aprenderas como Crear y Manipular un DOM.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados