"(..)es esencialmente una interfaz de programación de aplicaciones que proporciona un conjunto estándar de objetos para representar documentos HTML y XML, un modelo estándar sobre cómo pueden combinarse dichos objetos, y una interfaz estándar para acceder a ellos y manipularlos.
A través del DOM, los programas pueden acceder y modificar el contenido, estructura y estilo de los documentos HTML y XML, que es para lo que se diseñó principalmente.
El responsable del DOM es el consorcio W3C (World Wide Web Consortium).
En efecto, el DOM es una API para acceder, añadir y cambiar dinámicamente contenido estructurado en documentos con lenguajes como ECMAScript (Javascript).”
Referencia, Wikipedia: http://es.wikipedia.org/wiki/Document_Object_Model
A continuación voy a presentar algunos ejemplos con su explicación.
(Supongo que ya conocen XML).
Vamos a usar el siguiente XML:
biblioteca.xml
John Doe Existo? NoSeQue Juan Perez Uno mas NoSeQue
La estructura es la siguiente:
Tenemos el tag parent ("padre")
Una imagen ilustrando el árbol DOM del xml:
El nodo (node) biblioteca tiene dos (o más) hijos (child), que en nuestro ejemplo es el nodo libro que a su vez tiene 3 nodos hijos (titulo,autor,editor) y estos un nodo hijo con texto.
leerXml.php
load('biblioteca.xml');
//cargamos todos los libros.
$biblioteca = $dom->getElementsByTagName("libro");
foreach($biblioteca as $libro){
$titulo = $libro->getElementsByTagName("titulo");
//Obtengo el titulo.
$titulo = $titulo->item(0)->nodeValue;
$autor = $libro->getElementsByTagName("autor");
$autor = $autor->item(0)->nodeValue;
$editor = $libro->getElementsByTagName("editor");
$editor = $editor->item(0)->nodeValue;
echo "Titulo: $titulo
- Autor: $autor
- Editor: $editor
}
?>
De esta forma logramos mostrar el contenido del archivo xml.
¿Por que item(0)?: Si vemos nuestra estructura contamos con solo un child,
titulo,autor,editor. En el caso de que el libro tenga varios child
Generar XML con DOM
Para crear un xml recomiendo tener los datos en un array, veamos el ejemplo:
$biblioteca = array();
$biblioteca[] = array(
'titulo' => 'Otro Mas',
'autor' => 'Juan Perez',
'editor' => 'NoSeQue'
);
$biblioteca[] = array(
'titulo' => 'De Aca',
'autor' => 'John Doe',
'editor' => 'NoSeQue'
);
$dom = new DomDocument();
$dom->formatOutput = true; //Para que el xml salga indentado
//Creo el tag padre, (parent)
$padre = $dom->createElement('biblioteca');
$dom->appendChild($padre);
foreach($biblioteca as $libro){
//Creo el child de biblioteca, libro
$lib = $dom->createElement('libro');
$titulo = $dom->createElement('titulo');
$titulo->appendChild($dom->createTextNode($libro['titulo'])); //Creo un node con el titulo
$autor = $dom->createElement('autor');
$autor->appendChild($dom->createTextNode($libro['autor'])); //Idem anterior
$editor = $dom->createElement('editor');
$editor->appendChild($dom->createTextNode($libro['editor']));// ;-)
$lib->appendChild($titulo); //Agrego el autor al libro
$lib->appendChild($autor); //Idem
$lib->appendChild($editor); //Idem
$padre->appendChild($lib); //Agrego el libro a la biblioteca
}
if($dom->save('nuevo.xml')){
echo 'Generado con Exito';
}else{
echo 'Ups!';
}
?>
Esto fue mas o menos lo mismo que en el post anterior, pero supongo yo, mejor explicado.
DOM es una herramienta muy potente que hoy en dia esta muy de moda con ajax. Sobre XML & PHP existen muchas herramientas recomiendo darse una vuelta por:
XML Manipulation
Esto es todo por el momento, espero les sea de alguna utilidad.
No hay comentarios.:
Publicar un comentario