0% encontró este documento útil (0 votos)
58 vistas34 páginas

Element Tree

DOM o Document Object Model es un lenguaje para acceder y modificar documentos XML. Permite construir documentos, navegar por su estructura y agregar, modificar o eliminar elementos y contenido. Los documentos tienen una estructura lógica similar a un árbol, aunque no necesariamente se implementa como tal.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
58 vistas34 páginas

Element Tree

DOM o Document Object Model es un lenguaje para acceder y modificar documentos XML. Permite construir documentos, navegar por su estructura y agregar, modificar o eliminar elementos y contenido. Los documentos tienen una estructura lógica similar a un árbol, aunque no necesariamente se implementa como tal.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 34

Modelo DOM -

Procesamiento XML

Laboratorio IPC2
Qué es DOM?

DOM o Document Object Model es un lenguaje para acceder y modificar


documentos XML.

Con el Modelo de Objetos del Documento cualquier desarrollador puede


construir documentos, navegar por su estructura, y añadir, modificar o
eliminar elementos y contenido.

El mejor ejemplo del modelo DOM es HTML.


Ejemplo del modelo DOM en archivo XML
Representación gráfica del ejemplo anterior
En el DOM, los documentos tienen una estructura lógica que es muy parecida
a un árbol sin embargo, no especifica que debe ser implementado como un
árbol obligatoriamente.

El DOM es un modelo lógico que puede implementarse de cualquier manera


que sea conveniente.

Una propiedad importante de los modelos de estructura del DOM es algo


llamado “isomorfismo estructural”, el cual significa que si dos implementaciones
cualesquiera del Modelo de Objetos del Documento se usan para crear una
representación del mismo documento, ambas crearán el mismo modelo de
estructura, con exactamente los mismos objetos y relaciones.
Orígen del Modelo DOM

El DOM se originó como una especificación para permitir que los programas
Java y los scripts de JavaScript fueran portables entre los navegadores web.

La primera especificación del modelo surgió en 1997 llamada DOM Level 1 del
cual se realizó una actualización en el año 2000.

Se han realizado nuevas especificaciones al modelo agregando más


funcionalidades para el procesamiento de archivos con propiedades que
necesitan de otras funciones.
Los elementos que componen al archivo XML son tratados por el modelo
DOM como objetos. Los atributos que contienen estos objetos son tratados
por el modelo DOM como cadenas de caracteres o strings, por lo que tenemos
que tomarlo en cuenta al realizar operaciones con los datos recién obtenidos
del archivo de entrada.

Los atributos en el modelo DOM también pueden ser tratados como nodos en
vez de strings aunque es bastante inusual hacerlo.
Objetos en el modelo DOM
MiniDOM

MiniDOM o Minimal DOM Implementation es una implementación


simplificada del modelo DOM que puede utilizarse en Python.

Para utilizarlo es necesario importarlo desde el módulo xml.dom.

Este modelo usa la función “parse” para crear un objeto DOM directamente
desde nuestro archivo XML. La función tiene la siguiente sintaxis:
La propiedad “file_or_filename” debe contener una ruta hacia el archivo XML o
hacia un objeto de tipo archivo. Esta función retorna un documento el cual ya
podremos procesar como un XML.

Para empezar a buscar elementos con el nombre específico de una tag


utilizamos el siguiente comando: getElementByTagName().

Debido a que cada nodo se trata como un objeto, podemos acceder a los
valores de los tags usando las propiedades del objeto.

En el ejemplo siguiente podemos observar el procesamiento de un archivo


XML.
Primero debemos importar la librería y mediante el comando “parse” creamos un objeto
documento con la ruta del archivo XML.

Para obtener los nodos con el tag “item” utilizamos el comando “getElementsByTagName”.
Podemos obtener los valores de los atributos del tag de la siguiente manera:

Con lo cual tendremos de resultado:

Para imprimir todos los valores posibles de los atributos podemos usar instrucciones
cíclicas.
Lo cual nos dará el siguiente resultado:

Para obtener los valores dentro del tag tenemos dos opciones. Utilizar el comando “firstChild” o
utilizar childNodes[x] donde x es el índice. Usualmente este índice será 0.

De cualquier forma, el resultado será el mismo:


Ahora bien, si lo que desea es obtener todos los valores posibles dentro del tag especificado,
también podemos usar instrucciones cíclicas de la siguiente manera:

El resultado será el siguiente:


Element Tree

Es otra alternativa simple para procesar archivos XML que se puede utilizar en Python.
Igual que en MiniDOM, debemos primero importar la librería para utilizar el módulo.

Al utilizar Element Tree, se crea una estructura en forma de árbol utilizando el comando
“parse” y se obtiene un elemento raíz. Una vez identificado este elemento, ya podremos
recorrer el árbol debido a que todos los nodos del árbol están conectados.

Utilizaremos el mismo archivo de ejemplo que en MiniDOM para ejemplificar algunas


funciones básicas de Element Tree.
Primero debemos importar la librería y mediante el comando “parse” creamos un objeto de tipo
árbol. Con el comando “getroot()” obtenemos la raíz.

En este caso, con el Element Tree no lo utilizaremos cadenas para buscar los tags
específicos, sino que utilizaremos una notación en la que especificamos índices de
subárboles y posiciones dentro de sus nodos.

Utilizaremos el comando “root[X][Y].attribute”.

Donde X es el índice del nodo padre que buscamos y Y será el índice del subnodo.
Para buscar un elemento en especial:

Obtenemos el siguiente resultado:

Para obtener todos los valores de cierto atributo también utilizamos instrucciones cíclicas con la
característica de que utilizamos los identificadores root para la raíz, element para los atributos
en tags y subelement para los valores.
Y obtenemos el siguiente resultado:

Para obtener un valor específico:


El resultado será:

Para obtener todos los valores de las tags

Y el resultado será:
CONTANDO ELEMENTOS DE UN DOCUMENTO
XML (USANDO DOM)

minidom se debe importar desde el


módulo dom.

En este módulo se encuentra la función


getElementsByTagName,

que usaremos para encontrar el


elemento de etiqueta.

Tenga en cuenta que esto solo contará


la cantidad de elementos secundarios
debajo de la nota en la que ejecuta
len(), que en este caso es el nodo raíz.
Si desea encontrar todos los
subelementos en un árbol mucho más
grande, deberá recorrer todos los
elementos y contar cada uno de sus
elementos secundarios.
CONTANDO ELEMENTOS USANDO (ElementTree)

Del mismo modo, el ElementTree módulo nos permite calcular la cantidad de nodos conectados
a un nodo.
ESCRIBIR DOCUMENTOS XML(ElementTree)

ElementTree también es ideal para escribir datos en archivos XML. El siguiente código muestra cómo
crear un archivo XML con la misma estructura que el archivo que usamos en los ejemplos anteriores.

1. Cree un elemento, que actuará como nuestro


elemento raiz. En este caso se llamará “data"

2. Una vez que tenemos nuestro elemento raíz,


podemos crear subelementos usando la
SubElement función sintaxis:
Aquí parent está el nodo principal al que conectarse, attrib hay un diccionario que contiene los
atributos del elemento y extra hay argumentos de palabras clave adicionales. Esta función nos
devuelve un elemento, que puede usarse para adjuntar otros subelementos, como lo hacemos en
las siguientes líneas al pasar elementos al SubElement constructor.

3. Aunque podemos agregar nuestros atributos con la SubElement función, también podemos
usar la set()función, como hacemos en el siguiente código. El texto del elemento se crea con la
propiedad text del Elemento objeto.
4. En las últimas 3 líneas del código siguiente, creamos una cadena a partir del árbol XML y escribimos
esos datos en un archivo que abrimos.

La ejecución de este código dará como resultado un nuevo archivo, "items2.xml", que debería ser
equivalente al archivo "items.xml" original, al menos en términos de la estructura de datos XML.
Probablemente notará que la cadena resultante es solo una línea y no contiene sangría,
ENCONTRAR ELEMENTOS EN XML

El ElementTree módulo ofrece la findall()función, que nos ayuda a encontrar elementos


específicos en el árbol. Devuelve todos los artículos con la condición especificada. Además, el
módulo tiene la función find(), que devuelve solo el primer subelemento que coincide con los
criterios especificados.

Sintaxis:

Para ambas funciones, el match parámetro puede ser un nombre de etiqueta XML o una ruta. La
función findall() devuelve una lista de elementos y find devuelve un solo objeto de tipo Element.
se recorren todos los elementos de l root y todos los subElementos ‘item’

1. Obtenemos el dict de cada elemento para obtener el nombre del atributo en este caso
‘name’
2. Obtenemos únicamente el nombre de cada elemento si ya conocemos el atributo
nombrado ‘name’
MODIFICAR UN ELEMENTO

El ElementTree módulo presenta varias herramientas para modificar documentos XML existentes. El
siguiente ejemplo muestra cómo cambiar el nombre de un nodo, cambiar el nombre de un atributo y
modificar su valor, y cómo agregar un atributo adicional a un elemento.

El texto de un nodo se puede cambiar especificando el nuevo valor en el campo de texto del objeto de
nodo. El nombre del atributo se puede redefinir utilizando la set(name, value)función. La set función no
tiene que trabajar solo en un atributo existente, también se puede usar para definir un nuevo atributo.
ELIMINAR UN ELEMENTO XML

Como probablemente esperaría, el


ElementTree módulo tiene la
funcionalidad necesaria para eliminar
los atributos y subelementos del nodo.

El siguiente código muestra cómo


eliminar el atributo de un nodo
utilizando la pop() función. La función
se aplica al attrib parámetro de objeto.
Especifica el nombre del atributo y lo
establece en None.
Como se observa se eliminó el atributo name del primer subElemento
ELIMINAR SUB-ELEMENTO

Un subelemento específico se puede eliminar usando la remove función. Esta función debe
especificar el nodo que queremos eliminar.
ELIMINAR TODOS LOS ELEMENTOS

El ElementTree módulo nos presenta la clear() función, que se puede usar para eliminar todos los
subelementos de un elemento dado.

El siguiente ejemplo nos muestra cómo utilizar clear():

También podría gustarte