Sei sulla pagina 1di 15

Desarrollo de Aplicaciones Distribuidas Dr.

Roberto Gómez C

DOM y PHP

Roberto Gómez Cárdenas


rogomez@itesm.mx
http://homepage cem itesm mx/rogomez
http://homepage.cem.itesm.mx/rogomez

Lámina 1 Roberto Gómez C.

¿Qué es DOM?
• Document Object Model
• Especificación de W3C
– http://www.w3.org/DOM/
http://www w3 org/DOM/
• Mecanismo para que desde
cualquier lenguaje de
programación se pueda
manipular un documento XML o
HTML
• ¿Qué hace?
– |Crea una estructura lógica para el
documento (llamada “árbol nodal”)
– Proporciona un método para leer y
Lámina 2
manipular el documento Roberto Gómez C.

DOM: PHP y XML 1


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

DOM
• Es un modelo independiente de la plataforma y del
lenguaje de programación.
• No
N estat escrito
it para ser usado
d desde
d d un lenguaje
l j de
d
programación en particular.
• Proporciona una interfaz (API) al programador para
acceder de forma fácil, consistente y homogénea a los
elementos, atributos y otros posibles componentes de
un documento
documento.
• Se escribió empleando un lenguaje de definición de
interfaz (IDL).
• Para cada lenguaje de programación existe una
traducción de los tipos IDL a tipos del lenguaje. Roberto Gómez C.
Lámina 3

¿Qué puedo hacer con DOM?

• Reconstrucción del documento completo a partir del


modelo.
modelo
• Proporciona una representación estructurada orientada
a objetos, de los elementos individuales y el contenido
de una página, con métodos para recuperar y fijar las
propiedades de dichos objetos.
• Proporciona métodos para agregar y eliminar dichos
objetos permitiendo crear contenido dinámico.
• El acceso a cualquiera de las partes del documento.
• El W3C se encarga de la especificación de DOM.
Lámina 4 Roberto Gómez C.

DOM: PHP y XML 2


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Niveles de especificación DOM

• Nivel 1
– Soporte
p ppara XML 1.0 y HTML 4.0
• Nivel 2
– Extiende el nivel 1 con namespaces, soporte para
CSS, eventos de interfaz de usuario (ratón), de
manipulación de árboles y mejora de los métodos de
manipulación de árboles
árboles.
• Nivel 3
– Soporte para Xpath, explorar un esquema
combinado, más eventos de interfaz de usuario
(teclado),… Roberto Gómez C.
Lámina 5

Representación DOM

• DOM genera un árbol jerárquico en memoria


del documento o información XML
XML.
• Este árbol jerárquico de información en
memoria permite que a través del “parser” sea
manipulada la información.
• En el árbol de nodos, cada uno representa un
elemento, un atributo, contenido o algún otro
objeto.

Lámina 6 Roberto Gómez C.

DOM: PHP y XML 3


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

DOM

Document Builder
F t
Factory

Documento DOM
Objeto

Document
XML Objeto Objeto
Builder
Data

Objeto Objeto

Lámina 7 Roberto Gómez C.

Documentos DOM

• DOM trata un documento XML (o HTML)


como una jerarquía de nodos
• Distintos nodos y cada uno tiene permitido
solo ciertos hijos de ciertos tipos de nodo
• Existen algunos tipos de nodo que son hoja
• No pueden tener hijos

Lámina 8 Roberto Gómez C.

DOM: PHP y XML 4


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Ejemplo DOM

<TABLE>
<TBODY>
<TR>
<TD>Shady Grove</TD>
<TD>Aeolian</TD>
</TR>
<TR>
<TD>Over the River, Charlie</TD>
<TD>Dorian</TD>
</TR>
</TBODY>
</TABLE>

Lámina 9 Roberto Gómez C.

Segundo ejemplo DOM

• Nodo raíz es <bookstore>


• Todos los otros nodos del
documento se encuentran dentro
de <bookstore>
• El nodo raíz tienen cuatro nodos
<book>
• El primer nodo <book> cuenta
con cuatro nodos: <title>,
<author>, <year> y <price>,
cada uno de los cuales contiene
un nodo texto, “Every Italian”,
“Giada De Laurentiis”, “2005”,
y “30.00”.
Lámina 10 Roberto Gómez C.

DOM: PHP y XML 5


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Texto y nodos

• Un error común en el procesamiento de DOM es


esperar que un nodo elemento contenga texto.
texto
• Sin embargo, el texto de un nodo elemento se
almacena en un nodo texto.
• Ejemplo
<year> 2005 </year>
– El elemento
l nodo
d <year> , contiene
i un nodo
d con ell valor
l
“2005”.
– “2005” no es el valor del elemento <year>

Lámina 11 Roberto Gómez C.

Elementos, nodos y texto

Lámina 12 Roberto Gómez C.

DOM: PHP y XML 6


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Parser del documento XML

• Un parser DOM tiene una interfaz del siguiente


estilo:
nodoRaiz = domParser (documento )

• Lee todo el documento completo y devuelve un


Document Object.
• Document,
Document esto es,
es construye un árbol en
memoria que contiene toda la estructura del
documento leído.

Lámina 13 Roberto Gómez C.

DOM y PHP

• Desde PHP 5, la extensión de DOM se


encuentra disponible como parte del núcleo de
PHP.
• Para PHP 4 hay que usar DOM XML.

Lámina 14 Roberto Gómez C.

DOM: PHP y XML 7


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

El DOM en PHP

• Clases principales:
– DOMDocument: representa el nivel superior de un
documento XML (pero no el elemento raíz)
– DOMException: representa un error producido en el
documento XML
– DOMNode: representa un nodo en el documento XML
– DOMElement: representa un elemento (etiqueta)
– DOMAttr: representa un atributo
– DOMNodeList: representa una lista de nodos
– DOMNamedNodeMap: representa una lista de nodos que
se pueden acceder por un índice o por un nombre (se emplea
para representar los atributos)
Lámina 15 Roberto Gómez C.

Jerarquía de las clases

DOMNode Exception
p

DOMDocument DOMElement DOMAttr


DOMException

DOMNodeList DOMNamedNodeMap

Lámina 16 Roberto Gómez C.

DOM: PHP y XML 8


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Métodos clases

Lámina 17 Roberto Gómez C.

Clase DOMDocument

• La clase esta diseñada para leer y escribir


documentos XML implementando
p el API de
DOM usando funciones PHP XML.
• La clase permite abrir un documento XML,
“parsearlo”, y permite al desarrollador cambiar
cualquier cosa en el documentos, añadir nodos,
remo er atrib
remover atributos
tos , clonar nodos,
nodos insertar hijos,
hijos
etc.
• Para cargar un documento se usa el método
load.
Lámina 18 Roberto Gómez C.

DOM: PHP y XML 9


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Algunos métodos DOMDocument

Método Descripción
load Carga un documento (local o remoto).
loadXML Carga un documento a partir de una cadena.
save Guarda un documento en un archivo.
saveXML Guarda un documento en una cadena.
schemaValidate Valida un documento contra su esquema.
validate Valida un documento contra su DTD
getElementsBy Busca por elementos con un determinado
TagName nombre de etiqueta

Lámina 19 Roberto Gómez C.

El archivo canciones.xml
<?xml version="1.0"?>
<canciones>
<cancion genero="ranchera">
<titulo>No volvere </titulo> <cancion genero="altenativa">
<cantante>Pedro Infante </cantante> <titulo>Come away with me </titulo>
<album>Exitos </album> <cantante>Nora Jones</cantante>
<album>Community </album>
</cancion>
</cancion>
<cancion genero="jazz"> </canciones>
<titulo>East of the sun </titulo>
<cantante>Diana Krall</cantante>
<album>Live at Teatro Grand Rex</album>

</cancion>

Lámina 20 Roberto Gómez C.

DOM: PHP y XML 10


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Lectura documento XML

<?php
$datos = new DOMDocument();
$datos->load("canciones.xml");

echo "<pre>\n";
echo "Contenido a nivel texto:\n";
echo htmlspecialchars($datos->textContent);
echo "Contenido XML\n";
echo htmlspecialchars($datos->saveXML());
echo "</pre>";
</pre> ;

?>

Lámina 21 Roberto Gómez C.

Métodos y propiedades
DOMNodeList

• Algunas propiedades o métodos devuelven una


lista de nodos: childNodes,
childNodes
getElementsByTagName
• Propiedades:
– length: indica el número de nodos en la lista
(colección)
• Métodos:
– item: permite un acceso aleatorio a nodos de la lista
(desde 0 hasta length - 1)

Lámina 22 Roberto Gómez C.

DOM: PHP y XML 11


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Ejemplo
<?php
$datos = new DOMDocument();
$datos->load("canciones.xml");

echo "<pre>\n";
echo "Contenido a nivel texto:\n";
echo htmlspecialchars($datos->textContent);
echo "Contenido XML\n";
echo htmlspecialchars($datos->saveXML());
echo "</pre>";

echo "<html>";
echo "<body>";
$n=$datos->getElementsByTagName("cancion")->length;
echo "Hay $n canciones en el archivo ";
echo "</body>";
echo "</html>";

?>
Lámina 23 Roberto Gómez C.

Métodos creación

Método Descripción
createTextNode Crea una instancia de la clase DOMText. El nodo no
El nodo no se mostrará en el documento a menos que
sea insertado.
createElement Crea una nueva instancia de la clase DOMElement.
El nodo no se mostrará en el documento a menos que
sea insertado.
setAttribute Asigna un valor a un atributo. Si el atributo no existe,
este es creado.
appendChild Añade un hijo al final de una lista de hijos o crea una
nueva lista.

Lámina 24 Roberto Gómez C.

DOM: PHP y XML 12


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Propiedades DOMDocument

Propiedad Descripción
doctype Contiene el DOCTYPE
documentElement El elemento raíz del documento
documentURL La ubicación del documento
textContent Contenido textual del documento
validateOnParse Indica si se tiene que validar el documento durante la carga
formatOutput Formatea la salida “bonita” con sangría y espacios en blanco
extra

Lámina 25 Roberto Gómez C.

Sintaxis

• Creación elemento
class DOMDocument {
DOMElement createElement ( string name [[, string value] )
}
– name: el nombre de la etiqueta del elemento
– value: el valor del elemento, por default un elemento vacío será creado
– Regresa una nueva instancia de clase DOMElement o FALSE si courrión
algún error.
• Añadir un hijo
class DOMNode {
DOMNode appendChild ( DOMNode newnode )
}
– ewnode : el hijo a añadir
– El nodo añadido

Lámina 26 Roberto Gómez C.

DOM: PHP y XML 13


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Sintaxis
• Asignación atributo
class DOMElement {
bool setAttribute ( string name
name, string value )
}
– name: el nombre del atributo
– value: el valor del atributo
– Regresa TRUE en caso de éxito o FALSE en caso de falla.
• Creación texto nodo
class DOMDocument {
DOMText createTextNode ( string content )
}

– content: el contenido del texto


– Regresa el nuevo DOMText o FALSE si ocurrió algún error
Lámina 27 Roberto Gómez C.

Ejemplo creacion
<?php
$doc = new domDocument("1.0","ISO-8859-1");
$doc->formatOutput = 1;
$raiz = $doc
$doc->createElement(
>createElement('Alumnos');
Alumnos );

$rama = $doc->createElement('Alumno');

$rama->setAttribute('Semestre', '6');

$hoja = $doc->createElement('Nombre');
$hoja->appendChild($doc->createTextNode('Ulises Garrido'));
$rama->appendChild($hoja);
$rama appendChild($hoja);

$hoja = $doc->createElement('Matricula');
$hoja->appendChild($doc->createTextNode('445566'));
$rama->appendChild($hoja);
:
:
:
Lámina 28 Roberto Gómez C.

DOM: PHP y XML 14


Desarrollo de Aplicaciones Distribuidas Dr. Roberto Gómez C

Ejemplo creacion

:
:
:
$hoja = $doc->createElement('Carrera');
$hoja->appendChild($doc->createTextNode('ISE'));
$rama->appendChild($hoja);
$raiz->appendChild($rama);
$doc->appendChild($raiz);

echo $doc->saveXML();

?>

Lámina 29 Roberto Gómez C.

Salida del ejemplo

$ php creaAlumno.php
<?xml version="1.0" encoding="ISO-8859-1"?>
<Alumnos>
<Alumno Semestre="6">
<Nombre>Ulises Garrido</Nombre>
<Matricula>445566</Matricula>
<Carrera>ISE</Carrera>
</Alumno>
</Alumnos>
$

Lámina 30 Roberto Gómez C.

DOM: PHP y XML 15