Está en la página 1de 41

¿Qué es XML?

• XML es un lenguaje utilizado para representar documentos o datos estructurados electrónicamente:


Aquí hay un ejemplo:
<?xml version="1.0" ?>
<rooms>
<room name="Red"> 
<capacity>10</capacity>
<equipmentList>
<equipment>Projector</equipment>  
</equipmentList> 
</room>
<room name="Green"> 
<capacity>5</capacity>  
<equipmentList />
<features>  <feature>No Roof</feature>   </features> 
</room> 
</rooms>
¿Qué es XML?

• En realidad es un conjunto de reglas de sintaxis para la


creación de lenguajes de marcado semánticamente ricos en
un dominio particular.
• En otras palabras, se aplica XML para crear nuevos lenguajes!

• Cualquier lenguaje creado a través de las reglas de XML, como


MathML, se llama una aplicación de XML.
• Por lo tanto, un principio clave de XML es que el margen es
independiente de contenido.
Bien formado y válido
• La especificación XML define dos niveles de conformidad para documentos XML: bien
formado y válido.
• documentos bien formados son obligatorio, Mientras que la validez es Opcional.
• UNA documento bien formado compila con todas las reglas de sintaxis XML de WC3 -
como nombrar, anidación, y el atributo citar:
• Esto garantiza que un analizador XML puede analizar el documento sin error.
• UNA documento XML válido referencias y satisface un esquema:
• Un esquema es un documento independiente cuyo objetivo es definir los elementos legales, atributos,
y la estructura de un documento XML.
• Se puede pensar en un esquema como definir el vocabulario jurídico, el número y ubicación de los
elementos y atributos en su lenguaje de marcas.
• Por lo tanto, un esquema define un tipo o clase de documentos en particular.
• El lenguaje de marcado limita la información a ser de un tipo determinado para ser considerado
“legal”.
XML es ...

• Un formato flexible para describir cualquier tipo de documento.


• Al igual que HTML:
• Pero se puede definir lo que sea etiquetas que desea para su aplicación,
• Un auto-descripción de formato:
• Un documento XML proporciona información completa sobre lo que los valores de
campo están asociados con ella,
• PERO - sólo se describe un documento!
• No dice lo que significa,
• No explica cómo mostrarlo.
Aplicaciones XML
• comunicaciones por computadora de computadora.
• Sistemas de gestión de contenidos.
• Sistemas de comunicación inalámbrica.
• PDAs y dispositivos de mano.
• eLearning y servicios educativos.
• Servicios web.
• Wireless - Integración de Internet.
• Y así…
Partes de un documento XML

Declaración <?xml version "1.0" ?>

Etiquetas <LMC>
<MOL TITLE = "agua" >
Comience Etiquetas<ÁTOMOS>
Etiquetas finales <FORMACIÓN BUILTIN = "ELSYM" > HOH</FORMACIÓN>
</ÁTOMOS>
<CAUTIVERIO>
atributos <FORMACIÓN BUILTIN = "ATID1" > 1 2</FORMACIÓN>
<FORMACIÓN BUILTIN = "ATID2" > 2 3</FORMACIÓN>
<FORMACIÓN BUILTIN = "ORDEN" > 1 1</FORMACIÓN>
</CAUTIVERIO>
</MOL>
Atributo
</LMC>
Valores
• Para leer y actualización - crear y manipular - un documento XML, se
necesita un analizador XML.
• Hay dos tipos básicos de analizadores XML:
• analizador basado en árboles: Este analizador transforma un documento
XML en una estructura de árbol. Analiza todo el documento, y proporciona
acceso a los elementos del árbol
• analizador basado en eventos: Vistas de un documento XML como una serie
de eventos. Cuando se produce un evento específico, se llama a una función
de manejarlo
El análisis de respuesta XML

• Para analizar el XML devuelto nos volvemos a cualquier número de


extensiones que se encuentran en PHP.
• extensión XML
• analizador XML básica basa en la metodología SAX encuentra en todas las versiones de PHP.
• SimpleXML
• Podría decirse que el analizador XML más sencillo de usar.
• DOM
• Máxima flexibilidad tanto para el análisis y la creación de XML
• XMLReader
• Tire analizador, que combina facilidad de uso con un alto rendimiento.
DOM XML

• De acuerdo con el DOM, todo en un documento XML es una nodo.


• El DOM dice:
• El documento entero es un nodo de documento
• Cada elemento XML es un nodo elemento
• El texto en los elementos XML son los nodos de texto
• Cada atributo es un nodo de atributo
• Los comentarios son nodos de comentario
inicializar el analizador XML, cargar el XML, y
la salida

• <? Php
$ XmlDoc = new DOMDocument ();
$ XmlDoc-> carga ( “note.xml");

imprimir $ xmlDoc-> saveXML ();


saveXML () la función pone el documento XML interno en una
?> cadena, por lo que pueden dar salida
Bucle a través de archivo XML

• <? Php
$ XmlDoc = new DOMDocument ();
$ XmlDoc-> carga ( "note.xml");
$ X = $ xmlDoc-> documentElement;
foreach ($ x-> childNodes como una pieza $)
{
imprimir $ Item-> nombreNodo. "=". $ Item-> nodeValue. "<br />";
}
?>
• En la salida de lo anterior, se ve que hay nodos de texto vacíos entre cada
elemento.
• Cuando XML genera, que a menudo contiene espacios en blanco entre los
nodos. El analizador DOM XML trata estos elementos ordinarios
XMLReader
• avanzar analizador basado en flujo
• Es un analizador de tracción
• Sobre la base de la C API # XmlTextReader
• ventajas:
• huella de memoria baja
• soporte de espacio de nombres
• simple API
• soporte de validación
• Conjunto de funciones avanzadas
• Procesamiento más rápido
XMLReader: Ejemplo simple
xmlreader / reader_simple.xml

<?xml version='1.0'?>
<chapter xmlns:a="http://www.example.com/namespace-a"
xmlns="http://www.example.com/default">
<a:title>XMLReader</a:title>
<para>
First Paragraph
</para>
<a:section a:id="about">
<title>About this Document</title>
<para>
<!-- this is a comment -->
<?php echo 'Hi! This is PHP version ' . phpversion(); ?>
</para>
</a:section>
</chapter>
XMLReader:
xmlreader/reader_simple.php
$reader = new XMLReader();
$reader->open('reader_simple.xml');
$reader->read();

print "xmlns Attribute value: ".$reader->getAttributeNo(0)."\n\n";


while ($reader->read() && $reader->name != "a:title") { }
print "Local Name for Element: ".$reader->localName."\n";
print "Namespace URI for Element: ".$reader->namespaceURI."\n";

while($reader->read()) {
switch ($reader->nodeType) {
case XMLReader::ELEMENT:
print "Element: ".$reader->name."\n";
if ($reader->hasAttributes && $reader->moveToFirstAttribute()) {
do {
print " ".$reader->name."=".$reader->value."\n";
} while($reader->moveToNextAttribute());
}
break;
case XMLReader::PI:
print "PI Target: ".$reader->name."\n PI Data: ".$reader->value."\n";
}
}
XMLReader: Ejemplo simple
RESULTADOS

Local Name for Element: title


Namespace URI for Element: http://www.example.com/namespace-
a

Element: para
Element: a:section
a:id=about
Element: title
Element: para
PI Target: php
PI Data: echo 'Hi! This is PHP version ' . phpversion();
Crear XML
$dom = new domDocument("1.0","ISO-8859-1");
$dom->formatOutput = 1;
$root = $dom->createElement('books');

$branch = $dom->createElement('book');

$branch->setAttribute('ISBN', '0973862106');

$leaf = $dom->createElement('title');
$leaf->appendChild(
$dom->createTextNode(‘PHP Guide to Security'));
$branch->appendChild($leaf);
creación de XML Paso 2
$leaf = $dom->createElement('price');
$leaf->appendChild(
$dom->createTextNode('32.99'));
$branch->appendChild($leaf);

$leaf = $dom->createElement('url');
$leaf->appendChild(
$dom->createCDATASection(‘amazon.com/…’);
$branch->appendChild($leaf);
Creación de XML Paso 3

$root->appendChild($branch);
$dom->appendChild($root);
echo $dom->saveXML();
¿Que tenemos?

<?xml version="1.0" encoding="ISO-8859-1"?>


<books>
<book ISBN="0596007647">
<title>PHP Guide to Security</title>
<price>26.37</price>
<url><![CDATA[amazon.com/...]]></url>
</book>
</books>
Los analizadores de árboles

• Pros:
• navegación y modificación del documento XML completo
• La navegación y búsqueda son extremadamente rápido una vez que el árbol se carga en
memoria

• Contras:
• Debe esperar hasta que se cargue todo el árbol para comenzar a trabajar con el código XML.
• mucha memoria
Funciones PHP SimpleXML
• SimpleXML se encarga de las tareas más
comunes XML
• Es una manera fácil de obtener atributos de
un elemento y el contenido del texto
• SimpleXML sólo toma unas pocas líneas de
código para leer datos de texto de un
elemento (En comparación con DOM y el analizador de Expat)
Funciones PHP SimpleXML

Funciones SimpleXML:
• simplexml_import_dom - Obtener un objeto
SimpleXMLElement desde un nodo DOM.
• simplexml_load_file - Interpreta un archivo XML en un
objeto
• simplexml_load_string - Interpreta una cadena XML en un
objeto
Funciones PHP SimpleXML
SimpleXMLElement Clase:
• SimpleXMLElement :: addAttribute - Añade un atributo al
elemento SimpleXML
• SimpleXMLElement :: addChild - Añade un elemento
secundario al nodo XML
• SimpleXMLElement :: asXML - Devuelve una cadena XML
bien formado basado en el objeto SimpleXML
• SimpleXMLElement ::atributos - Identifica atributos de un
elemento (... continuará ...)
Funciones PHP SimpleXML
SimpleXMLElement Clase:
• SimpleXMLElement ::niños - Encuentra los hijos del
nodo dado
• SimpleXMLElement :: __ construct - Crea un nuevo
objeto SimpleXMLElement
• SimpleXMLElement :: recuento - Cuenta los hijos de un
elemento
• SimpleXMLElement :: getDocNamespaces - Devuelve
espacios de nombres declarados en el documento
(…continuará…)
Funciones PHP SimpleXML
SimpleXMLElement Clase:
• SimpleXMLElement ::getNombre - Obtiene el nombre
del elemento XML
• SimpleXMLElement :: getNamespaces - Devuelve
espacios de nombres utilizados en el documento
• SimpleXMLElement :: registerXPathNamespace - Crea
un contexto prefijo / ns para la siguiente petición XPath
• SimpleXMLElement :: XPath - Se ejecuta consulta XPath
en datos XML
Código SimpleXML de PHP

Para analizar un archivo XML:


<? Php
$ Xml = simplexml_load_file ( "test2.xml");

echo $ xml-> getName (). ":";


foreach ($> en XML (atributos) como $ Atr) {
echo $ Attr-> getName () "=" $ Atr " "...;
}

displayChildrenRecursive ($ xml);
echo "/> <br"; (...continuará...)
Código SimpleXML de PHP
function displayChildrenRecursive($xmlObj,$depth=0)
{ foreach($xmlObj->children() as $child) {
echo "<br/>";
echo str_repeat('-',$depth).$child->getName().": ".
$child." ";
foreach($child->attributes() as $attr) {
echo str_repeat('',$depth).$attr- >getName()."=".$attr."
";
}
displayChildrenRecursive($child,$depth+1);
}}
¿Cómo funciona el Código?
1. Cargar el archivo XML
2. Obtener el nombre y atributos del elemento raíz
3. Crear una función recursiva con un bucle foreach
que activará en cada nodo hijo, utilizando los hijos
() Función
4. Para cada nodo hijo: utilizar el método getName ()
para cada nombre del elemento que se muestra;
utilizar un bucle foreach para obtener los nodos de
atributo para cada nodo hijo, usando los atributos
función ().
5. Para cada atributo utilizar el método getName ()
para el nombre que se visualizará.
PHP XML DOM analizador
• El analizador DOM es un analizador basado
en árbol.
• analizador de árbol basa: Transforma un
documento XML en una estructura de árbol.
Analiza todo el documento, y proporciona
acceso a los elementos del árbol
• Bueno para archivos pequeños y medianos
XML (Cargar todo el archivo en la memoria)
PHP XML DOM analizador

• <? Xml version = "1.0" encoding = "ISO-


8859-1"?>
<Desde> Jani </ desde>
• El DOM XML analiza el XML anterior de
la siguiente manera:
• Nivel 1: El documento XML
• Nivel 2: Raíz etiqueta de elemento: <desde>
• Nivel 3: Raíz contenido del elemento: "Jani"
Funciones documento DOM
• Hay muchos:
(http://www.php.net/manual/en/class.domdocument.php)

• DOMDocument :: __ construct - Crea un


nuevo objeto DOMDocument
• carga DOMDocument :: - Carga de un
archivo XML
• DOMDocument :: saveXML - Vuelca el
árbol XML interno de vuelta a una cadena
Funciones DOM Element
• Hay muchos:
(Http://www.php.net/manual/en/class.domelement.php)

• DOMElement :: __ construct - Crea un


nuevo objeto DOMElement
• DOMElement :: getAttribute - Devuelve el
valor del atributo
• DOMElement :: getAttributeNode - Las
devoluciones atribuyen nodo
PHP Código DOM XML

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("test2.xml");
print $xmlDoc->saveXML();
print "<br/><br/>Alternative - Method 2: <br/><br/>";

$x = $xmlDoc->documentElement;
print $x->nodeName.": ";
foreach ($x->attributes AS $Attr){
echo $Attr->nodeName." = \"".
$Attr->nodeValue."\" ";}
PHP Código DOM XML
displayChildrenRecursive($x);
function displayChildrenRecursive($xmlObj,$depth=0) {
foreach ($xmlObj->childNodes AS $child) {
if ($child->nodeType==1 ){
echo "<br/>";
echo "-".str_repeat('-',$depth).$child->nodeName.": ";
foreach ($child->attributes AS $attr){
echo str_repeat('',$depth).$attr->nodeName." = \"".$attr-
>nodeValue."\" "; }
echo "(".$child->textContent.")";
displayChildrenRecursive($child,$depth+1); }}}
?>
¿Cómo funciona el Código?
1. Crear una instancia de DOMDocument y utilizarlo
para cargar un archivo XML
2. Método 1: El saveXML () la función pone el
documento XML interno en una cadena, por lo que
pueden dar salida
3. Método 2:
- Obtener el nombre del elemento raíz y atributos
- Loop de forma recursiva a través de todos los
elementos de todos los childNodes y de salida del
nodo (nodo de elemento y nodo de atributo)
nombres y contenidos
SimpleXML

• SimpleXML - extensión de PHP para manipular datos XML


• Disponible desde PHP5
• Relativamente simple en comparación con el DOM
• Convierte XML en objeto:
• Elementos - convertidos a los atributos individuales de la SimpleXMLElement objeto
• Atributos - visitada como matrices asociativas
• Elemento de datos - convierten en cadenas
SimpleXML funciones
Function Description
__construct() Creates a new SimpleXMLElement object
addAttribute() Adds an attribute to the SimpleXML element
addChild() Adds a child element the SimpleXML element
asXML() Gets an XML string from a SimpleXML element
attributes() Gets a SimpleXML element's attributes
children() Gets the children of a specified node
getDocNamespaces() Gets the namespaces of an XML document
getName() Gets the name of a SimpleXML element
getNamespace() Gets the namespaces from XML data
registerXPathNamespace() Creates a namespace context for the next XPath query
simplexml_import_dom() Gets a SimpleXMLElement object from a DOM node
simplexml_load_file() Gets a SimpleXMLElement object from an XML document
simplexml_load_string() Gets a SimpleXMLElement object from an XML string
xpath() Runs an XPath query on XML data
SimpleXML Elemento

• Instanciar SimpleXML
$xml = "<library><book>XML and PHP</book></library>";
$sxe = new SimpleXMLElement($xml);

• Usando el metodo asXML() – salida documento/subarbol a


archivo/cadena
$xml = "<library><book>XML and PHP</book></library>";
$sxe = new SimpleXMLElement($xml);
print $sxe->asXML(); //output in browser
$sxe->asXML(“test.xml”); //output to file
XML a partir de la base de datos

• Utilice instrucción proporcionada para crear la tabla y algunos datos


• Crear código PHP para crear XML

PSsql = "SELECT * FROM libros";


$ Query = mysql_query($ Consulta) o morir (Error de MySQL());
$xml = "<library>";

while($row = mysql_fetch_array($query)){
$xml .= "<book>";
$xml .= "<id>".$row['id']."</id>";
$xml .= "<title>".$row['title']."</title>";
$xml .= "<author>".$row['author']."</author>";
$xml .= "<description>".$row['description']."</description>";
$xml .= "<on_sale>".$row['on_sale']."</on_sale>";
$xml .= "</book>";
}

$xml .= "</library>";
$sxe = new SimpleXMLElement($xml);
$sxe->asXML("test.xml");
Elemento de acceso
• Para acceder a los elementos del árbol XML por su nombre
<?php
$katalog = simplexml_load_file(“kereta.xml");
print_r($katalog); //imprime arbol XML tree como arreglo

print $katalog->kereta->model; //imprime el primer modelo de


auto en XML

foreach ($katalog->kereta as $car) {


echo $car->model;
echo '<br/>';
} //imprime todos los modelos en XML

echo $katalog->kereta[4]->model;

También podría gustarte