Académique Documents
Professionnel Documents
Culture Documents
Roberto Gómez C
DOM y PHP
¿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
• 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
• 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
Document Builder
F t
Factory
Documento DOM
Objeto
Document
XML Objeto Objeto
Builder
Data
Objeto Objeto
Documentos DOM
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>
Texto y nodos
DOM y PHP
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.
DOMNode Exception
p
DOMNodeList DOMNamedNodeMap
Métodos clases
Clase 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
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>
<?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> ;
?>
Métodos y propiedades
DOMNodeList
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.
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
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
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 )
}
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.
Ejemplo creacion
:
:
:
$hoja = $doc->createElement('Carrera');
$hoja->appendChild($doc->createTextNode('ISE'));
$rama->appendChild($hoja);
$raiz->appendChild($rama);
$doc->appendChild($raiz);
echo $doc->saveXML();
?>
$ 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>
$