PHP SimpleXML SimpleXML 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Manejar XML desde SimpleXML Herramientas para menajer XML desde PHP Cargar un documento XML con SimpleXML Acceder a los elementos y atributos con SimpleXML Manejo de cadenas en SimpleXML Etiquetas XML especiales Manejo de errores en SimpleXML El espacio de nombres en SimpleXML Obtener los espacios de nombres de un documento y un elemento Acceder a los elementos y atributos con espacios de nombres con SimpleXML SimpleXML 11. 12. 13. 14. 15. 16. 17. SimpleXML y XPath Filtrar nodos por medio de XPath Modificar el prefijo de un Namespace con SimpleXML Editar y eliminar elementos en un documento XML Modificar, eliminar y almacenar documentos con NS Añadir nodos y atributos con simpleXML SimpleXML y DOMDocument PHP 1. Herramientas XML en PHP Herramientas XML en PHP ● ● ● ● ● DOM: Document Object Model SimpleXML XML Parser - Simple API for XML (SAX) Compatible con PHP4. XMLReader y XMLWriter XSL Reestructura los datos XML usando XSLT Herramientas XML en PHP ● DOM: ○ ○ ○ ○ ○ Compatible con el estándar W3C DOM Con más de 19 clases Poderosa navegación y capacidad de edición. Se considera dificil de usar Muchos pasos para conseguir resultados Herramientas XML en PHP ● SimpleXML: ○ ○ ○ ○ Contiene dos clases y tres funciones Se accede a elementos y atributos por nombre. Igual cuando la estructura es conocida Su capacidad de edición del documento XML es limitada Herramientas XML en PHP ● SimpleXML y DOM: ○ ○ ○ ○ ○ SimpleXML y DOM están basados en analizadores de tipo árbol. Todo el documento es cargado en memoria Pueden acceder a todas las partes del documento Ambos pueden leer y escribir un documento XML Documentos muy grandes pueden afectar el desempeño de la aplicación Herramientas XML en PHP ● SAX y XMLReader: ○ ○ ○ ○ ○ Ambos leen segmentos de un archivo El documento es leído por partes Son rápidos y utilizan poca memoria No pueden modificar el documento XML No pueden retroceder Herramientas XML en PHP ● ● ● ● ● ● Documentos cortos y con la estructura conocida, utilizar SimpleXML. Documentos largos o muy largos, utilizar XMLReader. Si desea modificar la estructura del documento no muy grande, use SimpleXML. Si desea modificar la estructura del documento de un documento grande o muy grande, use XMLWriter. Si quiere manejar documento XML complejos, use DOM. Si quiere filtrar o manipular el documento, use XSL. PHP 2. Ejemplo de lectura con SimpleXML Ejemplo de lectura con SimpleXML ● Cuenta con dos clases: ○ ○ ● Tres funciones ○ ● ● ● ● SimpleXMLElement SimpleXMLIterator Load XML de una cadena o archivo o importarlo del DOM. Generalmente el proceso con SimpleXML es cargarlo y visualizarlo con un ciclo foreach(). Accedemos a los elementos con el operador flecha -> Los atributos los accedemos con la notación de arreglos (corchetes). Visualizamos con echo o print como una cadena. PHP 3. Acceder a los elementos y atributos Acceder a los elementos y atributos ● ● ● ● Generalmente el proceso con SimpleXML es cargarlo y visualizarlo con un ciclo foreach(). Accedemos a los elementos con el operador flecha -> Los atributos los accedemos con la notación de arreglos (corchetes). Visualizamos con echo o print como una cadena. PHP 4. Convertir valores a cadenas Convertir valores a cadenas ● Para convertir un elemento a una cadena podemos utilizar las funciones de PHP como strtoupper() o (string). PHP 5. Nombres de nodos Nombres de etiqueta ● ● Los nombres de etiquetas de XML pueden recibir guiones, guiones bajos, acentos y eñes, pero PHP no los soporta en sus nombres de variables. Para poder visualizarlos necesitamos llaves y el nombre entre comillas simples o dobles. PHP 6. Errores en XML Errores en XML libxml_use_internal_errors(true); foreach(libxml_get_errors() as $error){ } Errores en XML libXMLError { /* Propiedades */ public int $level ; public int $code ; public int $column ; public string $message ; public string $file ; public int $line ; } PHP 7. Namespaces Namespaces ● ● ● ● Evitar conflictos entre diferentes términos XML. Identificar elementos relacionados para facilitar el procesamiento. Cada espacio de nombres está enlazado a una URL única El espacio de nombres puede aplicarse a todo el documento. Namespaces ● Un espacio de nombres se declara usando el atributo XML reservado xmlns, cuyo valor debe ser un identificador uniforme de recurso. xmlns="http://www.w3.org/1999/xhtml" Namespaces <?xml version="1.0"?> <cli:cliente xmlns:cli='http://es.wikipedia.org/wiki/Espacio_de_nombres_XML/cliente' xmlns:ped='http://es.wikipedia.org/wiki/Espacio_de_nombres_XML/pedido'> <cli:numero_ID>1232654</cli:numero_ID> <cli:nombre>Fulanito de Tal</cli:nombre> <cli:telefono>99999999</cli:telefono> <ped:pedido> <ped:numero_ID>6523213</ped:numero_ID> <ped:articulo>Caja de herramientas</ped:articulo> <ped:precio>187,90</ped:precio> </ped:pedido> </cli:cliente> Namespaces ● ● ● ● Espacios de nombres múltiples pueden existir en el mismo documento. Elementos y argumentos pueden pertenecer a un espacio de nombres. Los prefijos distinguen entre diferentes espacio de nombres. SimpleXML ignora los prefijos de elementos y atributos. PHP 8. Recuperar los espacio de nombres Recuperar los espacio de nombres ● ● (PHP 5 >= 5.1.2, PHP 7, PHP) SimpleXMLElement::getDocNamespaces — Regresa los namespaces declarados en el documento Recuperar los espacio de nombres ● ● ● (PHP 5 >= 5.1.2, PHP 7, PHP) SimpleXMLElement::getNamespaces — Retorna los namespaces usados en el documento public SimpleXMLElement::getNamespaces ([ bool $recursive = false ] ) : array PHP 9. Acceder a los elementos y atributos de un namespace Acceder a los elementos y atributos de un namespace ● ● ● ● Primero necesitamos identificar el espacio de nombres. Podemos detectar el atributo por medio del método attribute() pero necesitamos utilizar la url del ns. También podemos utilizar el método children(); como parámetro del ns. Podemos utilizar el método children() pero como la cadena del ns y el valor true. PHP 10. SimpleXML y XPath SimpleXML y XPath ● ● ● ● XPath es una especificación de la W3C. XPath es similar al manejo de un archivo en un disco duro. Podemos utilizar los caminos y funciones. Podemos encontrar y filtrar datos y luego navegar en ellos. SimpleXML y XPath ● ● ● ● ● ● “nombre de nodo” selecciona todos los nodos con el nombre "nombre de nodo" / Selecciona desde el nodo raíz // Selecciona los nodos en el documento del nodo actual que coinciden con la selección sin importar dónde estén . Selecciona el nodo actual .. Selecciona el padre del nodo actual @ Selecciona atributos PHP 11. Usar XPath para filtrar elementos SimpleXML y XPath ● ● ● ● ● ● “nombre de nodo” selecciona todos los nodos con el nombre "nombre de nodo" / Selecciona desde el nodo raíz // Selecciona los nodos en el documento del nodo actual que coinciden con la selección sin importar dónde estén . Selecciona el nodo actual .. Selecciona el padre del nodo actual @ Selecciona atributos PHP 12. Crear un espacio de nombres personalizado con simpleXML Crear un espacio de nombres personalizado ● ● ● ● Lo que determina el espacio de nombres es la URL, no el prefijo. El prefijo de un espacio de nombres se puede cambiar con simpleXML. Podemos cambiar el prefijo con el método registerXPathNamespace(). La sintaxis sería el siguiente: public SimpleXMLElement::registerXPathNamespace ( string $prefix , string $ns ) : bool PHP 13. Modificar, eliminar y almacenar documentos con SimpleXML Modificar, eliminar y almacenar documentos (PHP 5, PHP 7, PHP) SimpleXMLElement::asXML — Retorna un string XML correcto basado en un elemento SimpleXML Descripción: public SimpleXMLElement::asXML ([ string $filename ] ) : mixed El método asXML formatea los datos del objeto padre en XML versión 1.0. PHP 14. Modificar, eliminar y almacenar documentos con NS Modificar, eliminar y almacenar documentos (PHP 5, PHP 7, PHP) SimpleXMLElement::asXML — Retorna un string XML correcto basado en un elemento SimpleXML Descripción: public SimpleXMLElement::asXML ([ string $filename ] ) : mixed El método asXML formatea los datos del objeto padre en XML versión 1.0. PHP 15. Añadir nodos y atributos Con simpleXML Añadir nodos y atributos con simpleXML (PHP 5 >= 5.1.3, PHP 7, PHP) SimpleXMLElement::addChild — Añade un elemento hijo al nodo XML Descripción public SimpleXMLElement::addChild ( string $name [, string $value [, string $namespace ]] ) : SimpleXMLElement Añade un elemento hijo al nodo y retorna un SimpleXMLElement del hijo. Añadir nodos y atributos con simpleXML (PHP 5 >= 5.1.3, PHP 7, PHP) SimpleXMLElement::addAttribute — Añade un atributo al elemento SimpleXML Descripción: public SimpleXMLElement::addAttribute ( string $name [, string $value [, string $namespace ]] ) : void Añade un atributo al elemento SimpleXML. PHP 16. SimpleXML y DOMDocument SimpleXML y DOMDocument ● Podemos relacionar fácilmente los archivos leídos desde SimpleXML a la clase DOMDocument, entre otras cosas para dar un formato más legible. PHP 17. El iterador SimpleXML El iterador SimpleXML ● ● Un iterador es un apuntador que nos permite recorrer todos los elementos, ya que todos apuntan al siguiente elemento. Las principales métodos son: Las principales operaciones de un iterador son: ○ ○ ○ ○ ○ ○ ○ rewind(), mueve el iterador al primer elemento. key(), regresa la llave o clave del elemento actual. current(), regresa el valor del elemento actual. next(), mueve el iterador al próximo elemento. valid(), verifica si hay más elementos para moverse. getChildren(), Devuelve los sub nodos del elemento actual. hasChildren(), Comprueba si el elemento actual tiene subelementos. PHP 18. Exportar los datos a MySQL Exportar los datos a MySQL ● Una vez que hemos leído los datos del documento XML y los iteramos, nos será muy sencillo subirlo a una base de datos.