Resumen de uso de funciones DOM con PHP

Resumen de uso de funciones DOM con PHP El Document Object Mode (DOM), es la especificación de una interfaz no dependiente del lenguaje de programación que permite a programas acceder, modificar y actualizar la estructura y el estilo de documentos. DOM proporciona un conjunto de objetos estándar para representar documentos XML y HTML y un conjunto de operaciones para acceder a ellos y modificarlos. PHP implementa el estándar DOM (http://www.php.net/manual/en/ref.dom.php) mediante un conjunto de clases que representan los objetos definidos en la especificación y las funciones para trabajar con ellos. La siguiente figura representa de manera simplificado el conjunto de entidades (objetos, clases) que podemos utilizar en con DOM, con un ejemplo de documento. En la implementación PHP manejaremos fundamentalmente las siguientes clases: • DOMNode. Es la clase base de la mayoría de clases de la implementación. Proporciona métodos para crear nuevos elementos, moverse por el árbol que representa un documento, etc. Las clases que extienden (por herencia) a esta, tienen acceso a sus métodos y propiedades. • DOMDocument. Extiende DOMElement. Representa un documento y proporciona métodos para crear nuevos elementos y realizar búsquedas por un documento DOM. • DOMElement. Extiende DOMElement. Representa un elemento dentro del documento y proporciona métodos para acceder y modificar los atributos de un nodo. • DOMNodeList. Representa una lista de DOMNodes. Algunas de las funciones más utilizadas son las siguientes: • DOMNode->appendChild() - Adds new child at the end of the children • DOMNode->removeChild() - Removes child from list of children • DOMNode->hasAttributes() - Checks if node has attributes • DOMNode->hasChildNodes() - Checks if node has children Sus propiedades son: Name Type Readonly Description nodeName string yes Returns the most accurate name for the current node type nodeValue string no The value of this node, depending on its type. nodeType int yes Gets the type of the node. One of the predefined XML_xxx_NODE constants parentNode DOMNode yes The parent of this node. childNodes DOMNodeList yes A DOMNodeList that contains all children of this node. If there are no children, this is an empty DOMNodeList. firstChild DOMNode yes The first child of this node. If there is no such node, this returns NULL. lastChild DOMNode yes The last child of this node. If there is no such node, this returns NULL. previousSibling DOMNode yes The node immediately preceding this node. If there is no such node, this returns NULL. nextSibling yes The node immediately following this node. If there is no such node, this returns NULL. DOMNamedNodeMap yes A DOMNamedNodeMap containing the attributes of this node (if it is a DOMElement) or NULL otherwise. attributes DOMNode ownerDocument DOMDocument yes The DOMDocument object associated with this node. namespaceURI string yes The namespace URI of this node, or NULL if it is unspecified. Name Type Readonly Description prefix string no The namespace prefix of this node, or NULL if it is unspecified. localName string yes Returns the local part of the qualified name of this node. baseURI string yes The absolute base URI of this node or NULL if the implementation wasn't able to obtain an absolute URI. textContent string no This attribute returns the text content of this node and its descendants. La segunda columna indica el tipo de datos devuelto al invocar a la propiedad. Si observamos la propiedad nodeList, por ejemplo, vemos que devuelve un DOMNodeList, es decir una lista de nodos que son descendientes del nodo sobre el que se invoca la propiedad. La clase DOMNodeList sólo tiene un método DOMNode item($index) y una propiedad length. Es decir, que sólo se utiliza para recorrer una lista de nodos, mediante un bucle for y acceder a sus elementos. El siguiente ejemplo muestra cómo crear un documento XML: En el ejemplo, se accede a una BBDD para seleccionar una tabla de un catálogo. A continuación se crea una instancia de la clase DOMDocument, que utilizaremos para crear todos los elementos del documento. Es necesario añadir los nodos al documento invocando la función appendChild del nodo sobre el que queremos insertar un descendiente en el árbol. Por tanto se añade un nuevo elemento al documento creado, de manera que tenemos el elemento raíz. La invocación del método appenChild devuelve un puntero al nuevo nodo insertado en el documento, que utilizaremos para seguir insertando descendientes jerárquicamente. Por ejemplo, $Catalogo = $dom -> appendChild($element); Inserta el elemento raíz y devuelve un puntero al nodo añadido, con lo que posteriormente podemos insertar elementos que desciendan del raíz $Producto = $Catalogo -> appendChild($element); Finalmente, la función saveXML() devuelve una cadena de texto con la instancia XML del documento DOM en uso. Para trabajar con instancias XML previamente creadas se utilizan las funciones de búsqueda de DOMDocument, así como las propiedades de los DOMNodes: $dom = new DOMDocument('1.0'); $dom->load('exportar.xml'); //Obtenemos el elemento raiz como DOMNodeList $array = $dom->getElementsByTagName("Catalogo"); //Obtenemos el primer elemento (la lista solo tiene uno) $cat=$array->item(0); //Obtenemos todos los hijos de este nodo (productos) $nodes = $cat->childNodes; for ($i = 0; $i < $nodes->length; $i++) { $node= $nodes->item($i); //Buscamos su atributo $categ= $node->attributes->getNamedItem("Cat")->nodeValue; //Para cada producto obtenemos sus hijos $prod = $node->childNodes; $name = $prod -> item(0)->nodeValue; $precio = $prod->item(1)->nodeValue; $unidades = $prod->item(2)->nodeValue; //Insertamos el producto en la BBDD $query="INSERT INTO catalogo (categoria, descripcion, precio, unidades) VALUES(".$categ.",".$name.",".$precio.",".$unidades.")"; mysql_query($query,$l); } desconectar($l); ?> En primer lugar se carga en memoria la instancia XML con la que se va a trabajar: $dom = new DOMDocument('1.0'); $dom->load('exportar.xml'); A continuación se buscan los elementos que nos interesan. $array = $dom->getElementsByTagName("Catalogo"); La invocación anterior devolvería un DOMNodeList con todos los elementos del documento que se llamen “Catalogo”. Como, en este caso “Catalogo” es el elemento raíz, la lista sólo contendrá un elemento. $cat=$array->item(0); En este momento podemos obtener todos los descendientes de raíz y recorrerlos para trabajar con ellos: //Obtenemos todos los hijos de este nodo (productos) $nodes = $cat->childNodes; for ($i = 0; $i < $nodes->length; $i++) { $node= $nodes->item($i); ... ... Resumen de acceso a BBDD con PHP Para acceder a una BBDD con PHP debemos utilizar las funciones correspondientes a la BBDD que estamos utilizando. En la documentación de PHP se pueden encontrar funciones para trabajar con multitud de BBDD. En nuestro caso utilizamos una BBDD MySQL, con lo que tenemos que usar las funciones correspondiente. Para trabajar con una BBDD usualmente se siguen los siguientes pasos: 1. Conectar a la BBDD usando la función mysql_connect(). $link = mysql_connect('localhost', 'ad', 'ad') or die('Could not connect: ' . mysql_error()); 2. Seleccionar una BBDD mysql_select_db(). en particular usando la función mysql_select_db('adprueba') or die('Could not select database'); 3. A partir de este momento, se realiza la consulta deseada, creando una cadena de caracteres con las sentencias SQL necesarias. $query = 'SELECT * FROM catalogo WHERE `categoria`='.mysql_escape_string($c); 4. Se ejecuta la consulta con mysql_query(). Los resultados se devuelven en forma de tabla (matriz) dónde cada fila corresponde a la fila correspondiente en la BBDD (según la consulta). 5. Se recorre la matriz de resultados con la función mysql_fetch_assoc(). Cada llamada a la función devuelve una fila de la tabla hasta que llegar al final. // Printing results in HTML while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo ""; echo "\t\t\n"; echo "".$line["descripcion"]."\n"; echo "".$line["precio"]."\n"; ech

4 downloads 73 Views 94KB Size

Recommend Stories


RESUMEN DE LAS FUNCIONES VITALES
1 . SERES VIVOS Y FUNCIONES VITALES. ¿Qué diferencia a los seres vivos de la materia inerte? A) Los seres vivos realizan funciones vitales: nutrición,

Funciones. Resumen del contenido
SPAlgebra06.Chap07.qxd 6/2/06 11:44 AM Page 31 C APÍTULO 7 Funciones Resumen del contenido En el Capítulo 7, los estudiantes aumentan su entendimi

Desarrollo Web con PHP y MySQL
Apéndice Desarrollo Web con PHP y MySQL aspiraciones"; } ?> BASES DE DATOS Hasta ahora hemos visto la funciones básicas de PHP, lo que viene a con

EJEMPLO DE CONSULTA PHP MYSQL. SELECT. USO DEL BUCLE WHILE CON MYSQLI_FETCH_ARRAY PARA EXTRAER LOS RESULTADOS DE UNA CONSULTA
Consultas avanzadas a base de datos MySQL con PHP. Ejercicios. APRENDERAPROGRAMAR.COM EJEMPLO DE CONSULTA PHP MYSQL. SELECT. USO DEL BUCLE WHILE CON

Story Transcript

Resumen de uso de funciones DOM con PHP El Document Object Mode (DOM), es la especificación de una interfaz no dependiente del lenguaje de programación que permite a programas acceder, modificar y actualizar la estructura y el estilo de documentos. DOM proporciona un conjunto de objetos estándar para representar documentos XML y HTML y un conjunto de operaciones para acceder a ellos y modificarlos. PHP implementa el estándar DOM (http://www.php.net/manual/en/ref.dom.php) mediante un conjunto de clases que representan los objetos definidos en la especificación y las funciones para trabajar con ellos. La siguiente figura representa de manera simplificado el conjunto de entidades (objetos, clases) que podemos utilizar en con DOM, con un ejemplo de documento.

En la implementación PHP manejaremos fundamentalmente las siguientes clases: • DOMNode. Es la clase base de la mayoría de clases de la implementación. Proporciona métodos para crear nuevos elementos, moverse por el árbol que representa un documento, etc. Las clases que extienden (por herencia) a esta, tienen acceso a sus métodos y propiedades. • DOMDocument. Extiende DOMElement. Representa un documento y proporciona métodos para crear nuevos elementos y realizar búsquedas por un documento DOM. • DOMElement. Extiende DOMElement. Representa un elemento dentro del documento y proporciona métodos para acceder y modificar los atributos de un nodo.

• DOMNodeList. Representa una lista de DOMNodes. Algunas de las funciones más utilizadas son las siguientes: • DOMNode->appendChild() - Adds new child at the end of the children • DOMNode->removeChild() - Removes child from list of children • DOMNode->hasAttributes() - Checks if node has attributes • DOMNode->hasChildNodes() - Checks if node has children

Sus propiedades son: Name

Type

Readonly

Description

nodeName

string

yes

Returns the most accurate name for the current node type

nodeValue

string

no

The value of this node, depending on its type.

nodeType

int

yes

Gets the type of the node. One of the predefined XML_xxx_NODE constants

parentNode

DOMNode

yes

The parent of this node.

childNodes

DOMNodeList

yes

A DOMNodeList that contains all children of this node. If there are no children, this is an empty DOMNodeList.

firstChild

DOMNode

yes

The first child of this node. If there is no such node, this returns NULL.

lastChild

DOMNode

yes

The last child of this node. If there is no such node, this returns NULL.

previousSibling DOMNode

yes

The node immediately preceding this node. If there is no such node, this returns NULL.

nextSibling

yes

The node immediately following this node. If there is no such node, this returns NULL.

DOMNamedNodeMap yes

A DOMNamedNodeMap containing the attributes of this node (if it is a DOMElement) or NULL otherwise.

attributes

DOMNode

ownerDocument DOMDocument

yes

The DOMDocument object associated with this node.

namespaceURI string

yes

The namespace URI of this node, or NULL if it is unspecified.

Name

Type

Readonly

Description

prefix

string

no

The namespace prefix of this node, or NULL if it is unspecified.

localName

string

yes

Returns the local part of the qualified name of this node.

baseURI

string

yes

The absolute base URI of this node or NULL if the implementation wasn't able to obtain an absolute URI.

textContent

string

no

This attribute returns the text content of this node and its descendants.

La segunda columna indica el tipo de datos devuelto al invocar a la propiedad. Si observamos la propiedad nodeList, por ejemplo, vemos que devuelve un DOMNodeList, es decir una lista de nodos que son descendientes del nodo sobre el que se invoca la propiedad. La clase DOMNodeList sólo tiene un método DOMNode item($index) y una propiedad length. Es decir, que sólo se utiliza para recorrer una lista de nodos, mediante un bucle for y acceder a sus elementos. El siguiente ejemplo muestra cómo crear un documento XML:

En el ejemplo, se accede a una BBDD para seleccionar una tabla de un catálogo. A continuación se crea una instancia de la clase DOMDocument, que utilizaremos para crear todos los elementos del documento. Es necesario añadir los nodos al documento invocando la función appendChild del nodo sobre el que queremos insertar un descendiente en el árbol. Por tanto se añade un nuevo elemento al documento creado, de manera que tenemos el elemento raíz. La invocación del método appenChild devuelve un puntero al nuevo nodo insertado en el documento, que utilizaremos para seguir insertando descendientes jerárquicamente. Por ejemplo, $Catalogo = $dom -> appendChild($element); Inserta el elemento raíz y devuelve un puntero al nodo añadido, con lo que posteriormente podemos insertar elementos que desciendan del raíz $Producto = $Catalogo -> appendChild($element);

Finalmente, la función saveXML() devuelve una cadena de texto con la instancia XML del documento DOM en uso. Para trabajar con instancias XML previamente creadas se utilizan las funciones de búsqueda de DOMDocument, así como las propiedades de los DOMNodes: $dom = new DOMDocument('1.0'); $dom->load('exportar.xml'); //Obtenemos el elemento raiz como DOMNodeList $array = $dom->getElementsByTagName("Catalogo"); //Obtenemos el primer elemento (la lista solo tiene uno) $cat=$array->item(0); //Obtenemos todos los hijos de este nodo (productos) $nodes = $cat->childNodes; for ($i = 0; $i < $nodes->length; $i++) {

$node= $nodes->item($i); //Buscamos su atributo $categ= $node->attributes->getNamedItem("Cat")->nodeValue; //Para cada producto obtenemos sus hijos $prod = $node->childNodes; $name = $prod -> item(0)->nodeValue; $precio = $prod->item(1)->nodeValue; $unidades = $prod->item(2)->nodeValue; //Insertamos el producto en la BBDD $query="INSERT INTO catalogo (categoria, descripcion, precio, unidades) VALUES(".$categ.",".$name.",".$precio.",".$unidades.")"; mysql_query($query,$l); } desconectar($l); ?>

En primer lugar se carga en memoria la instancia XML con la que se va a trabajar: $dom = new DOMDocument('1.0'); $dom->load('exportar.xml');

A continuación se buscan los elementos que nos interesan. $array = $dom->getElementsByTagName("Catalogo");

La invocación anterior devolvería un DOMNodeList con todos los elementos del documento que se llamen “Catalogo”. Como, en este caso “Catalogo” es el elemento raíz, la lista sólo contendrá un elemento. $cat=$array->item(0);

En este momento podemos obtener todos los descendientes de raíz y recorrerlos para trabajar con ellos: //Obtenemos todos los hijos de este nodo (productos) $nodes = $cat->childNodes; for ($i = 0; $i < $nodes->length; $i++) { $node= $nodes->item($i); ... ...

Resumen de acceso a BBDD con PHP Para acceder a una BBDD con PHP debemos utilizar las funciones correspondientes a la BBDD que estamos utilizando. En la documentación de PHP se pueden encontrar funciones para trabajar con multitud de BBDD. En nuestro caso utilizamos una BBDD MySQL, con lo que tenemos que usar las funciones correspondiente. Para trabajar con una BBDD usualmente se siguen los siguientes pasos: 1. Conectar a la BBDD usando la función mysql_connect(). $link = mysql_connect('localhost', 'ad', 'ad') or die('Could not connect: ' . mysql_error());

2. Seleccionar una BBDD mysql_select_db().

en

particular

usando

la

función

mysql_select_db('adprueba') or die('Could not select database');

3. A partir de este momento, se realiza la consulta deseada, creando una cadena de caracteres con las sentencias SQL necesarias. $query = 'SELECT * FROM catalogo WHERE `categoria`='.mysql_escape_string($c);

4. Se ejecuta la consulta con mysql_query(). Los resultados se devuelven en forma de tabla (matriz) dónde cada fila corresponde a la fila correspondiente en la BBDD (según la consulta). 5. Se recorre la matriz de resultados con la función mysql_fetch_assoc(). Cada llamada a la función devuelve una fila de la tabla hasta que llegar al final. // Printing results in HTML while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo ""; echo "\t\t\n"; echo "".$line["descripcion"]."\n"; echo "".$line["precio"]."\n"; echo "".$line["unidades"]."\n"; echo "\t\n"; }

6. Se liberan memoria con mysql_free_result(). Para consultas grandes esto mejora el rendimiento.

7. Se cierra la conexión a la BBDD cuando no hay más consultas que ejecutar mysql_close($link);

Los pasos 3, 4 y 5 se repiten tantas veces como sea necesario, es decir para cada consulta que sea necesario hacer. La sintaxis de las consultas más comunes es la siguiente: Borrar: DELETE FROM Tabla WHERE user = 'jcole'

Insertar: INSERT INTO Tabla (col1, col2, col3) VALUES(15, 76, 43)

Actualizar una fila: UPDATE Tabla SET dni=48423234 UPDATE Tabla SET age=age+1

Seleccionar datos: SELECT * FROM Tabla; SELECT dni, edad FROM Tabla

Para seleccionar, actualizar o borrar se pueden especificar condiciones añadiendo la cláusula WHERE al final. Esta cláusula puede usar expresiones: SELECT * FROM Tabla WHERE dni=47373621 SELECT * FROM Tabla WHERE unidades=15 AND precio < 100 UPDATE Tabla SET edad=26 WHERE dni=48423234

Aunque se podrían realizar múltiples consultas sucesivas con PHP, casi siempre es preferible combinar consultas sobre varias tablas. Por ejemplo: SELECT tabla.dni, tabla2.salario FROM tabla1, tabla2 WHERE t1.dni = t2.dni;

La consulta anterior permite seleccionar elementos de tablas relacionales, como las siguientes: dni nombre apellidos edad 4523345 Juan García 46 1234223 Ana Pérez 37

dni 4523345 3232535

salario 15000 26000

fechaContrato 11-12-2005 09-10-2005

La consulta anterior devolvería el salario del usuario con dni 4523345 ya que es la única coincidencia en el campo dni entre la tabla 1 y la tabla 2. Para más información sobre sintaxis SQL consultar el capítulo 13 del manual de MySQL

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.