Sunteți pe pagina 1din 12

DOM (Document Object Model)

Para extraer la informacin que contiene un documento XML, se podra escribir cdigo para analizar el contenido del archivo XML (archivo de texto) Utilizar un parser de XML, compatible con el modelo de objeto de documento (DOM) de XML.
Desaprovechara una de las ventajas de XML: el ser una forma estructurada de representar datos

DOM define una interfaz estndar para facilitar el acceso al contenido de los documentos XML

DOM: El modelo de objetos del documento


El DOM es el medio por el que se puede acceder y manipular un documento XML

Provee una representacin de un documento XML en forma de un rbol


Cada elemento es un nodo Los elementos hijos y el texto contenido dentro de un elemento son subnodos

Caractersticas DOM
Documento se carga totalmente en memoria en una estructura de rbol

Ventaja: fcil acceder a datos en funcin de la


jerarqua de elementos, as como modificar el contenido de los documentos e incluso crearlos desde cero.

Desventaja: coste en tiempo y memoria que


conlleva construir el rbol

Implementaciones
Los navegadores implementaron DOM propietarios para HTML compartiendo el que defina ECMAScript pero siendo incompatibles entre s Los DOM propietarios eran incompletos Un buen DOM debe ser completo: Permitir (re)construir un documento completo desde el modelo Acceder a cualquier parte de un documento original

El DOM del W3C


El W3C cre una recomendacin de DOM para XML. http://www.w3.org/DOM
para HTML y XML.

El DOM W3C permite acceder a todas las partes de un documento. Existen tres niveles de DOM:
Nivel 0: es una formalizacin del DOM HTML definido implcitamente por JavaScript. Nivel 1: permite acceder a todas las partes de un documento XML pero no a la DTD ni a las hojas de estilo. Nivel 2: permite acceso a la DTD, hojas de estilo y espacios de nombres.

El DOM pretende constituir un API que pueda ser utilizado por distintas aplicaciones

Conceptos bsicos
Analizador DOM: Crea una estructura de tipo rbol Manipulacin del rbol. Objetos W3C DOM:
Element un elemento XML Attribute un attributo Text texto contenido en un elemento o atributo CDATAsection seccin CDATA ProcessingInstruction Una instruccin de procesamiento Comment Contenido de un comentario de XML Document El objeto documento DocumentType Referencia al elemento DOCTYPE DocumentFragment Referencia a fragmento de documento

Objetos relacionados con Nodos


Node un nodo en el rbol de un documento NodeList una lista de objetos nodos NamedNodeMap permite interaccin y acceso por nombre a una coleccin de atributos

Jerarqua de clases

Se representa como un rbol

Ejemplo

Document_node DOCUMENT

<DOCUMENT> TABLE <TABLE> <BODY> Element_node <TR> BODY <TD>Shady Grove</TD> <TD>Aeolian</TD> </TR> TR TR <TR> <TD>Over the River, Charlie </TD> TD TD TD TD <TD>Dorian</TD> Cdata_section_node </TR> Over </BODY> Shady Grove Aeolian theRiver, Dorian </TABLE> Charlie </DOCUMENT

Mtodos para navegar por el DOM


getDocumentElement() Devuelve el elemento raiz getFirstChild() Devuelve el nodo que es el primer "hijo" de este nodo. getNextSibling() Devuelve el nodo que es el siguiente "hermano" de este nodo. getLastChild() Devuelve el nodo que es el ltimo "hijo" de este nodo. getPreviousSibling() Devuelve el nodo que es el ltimo "hermano" de este nodo. getAttribute(java.lang.String attrName) Devuelve un objeto string que representa el valor de un atributo.

DOM
DOCUMENT TABLE

doc documentElement

childNodes.item(0)

BODY TR TD
Shady Grove

getElementByTagName(titulo_tabla)

TR TD TD

TD

Aeolian

Over theRiver, Charlie

Dorian

doc.documentElement.childNodes.item(0).getElementsByTagName(titulo_tabla)

import org.w3c.dom.*; import org.apache.xerces.parsers.DOMParser;

public class XML_Parser{ public static void main(String[] args){ try{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); el Se parsea dbf.setNamespaceAware(true); documento documentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new File(filename)); display(doc); Se obtiene un catch (Exception e){} tipo de objeto } Document public static void display(Node node){ if (node==null) return null; int type = node.getNodeType(); Si el documento switch (type) { case Node.DOCUMENT_NODE: { no es vlido o display(((Document)node).getDocumentElement()); bien formado break;} case Node.ELEMENT_NODE: NodeList childNodes = node.getChildNodes(); if (childNodes != null) { length=childNodes.getLength(); Para cada for(i=0;i<length;i++) hijo se llama display(childNodes.item(i)); a la funcin } break;} display case Node.CDATA_SECTION_NODE: { (recursivo) // Print values break;} }}

Se crea un parser DOM

S-ar putea să vă placă și