
Asumiendo que sabemos la estructura básica de un XML, tomaré como referencia el ejemplo anterior, lo primero es declarar el XML:
$xml = new DomDocument('1.0', 'UTF-8');Podemos utilizar otras codificaciones, pero a modo de ejemplo seguiremos con utf-8. Luego de esto creamos el nodo principal o raíz:
$raiz = $xml->createElement('raiz'); $raiz = $xml->appendChild($raiz);Ahora solo nos queda rellenar dicho nodo con los sub-nodos consecuentes:
$nodo = $xml->createElement('libro'); $nodo = $raiz->appendChild($nodo);Como vemos, la forma de agregar nodos es básica y aplica para sub-nodos, por ejemplo:
$subnodo = $xml->createElement('item','texto dentro del item'); $subnodo = $nodo->appendChild($subnodo);Una vez hecho esto nuestro código esta listo, solo falta volcarlo a un archivo físico:
$xml->formatOutput = true; $xml->saveXML(); $xml->save('ruta/archivo.xml');Aunque en esta parte podemos variar un poco, si queremos mostrar el XML tal cual como fue creado solo hace falta guardar la salida en una variable y utilizar la función htmlentities ($ xml ):
$el_xml = $xml->saveXML(); echo htmlentities($el_xml);Y si queremos no solo guardarlo, sino mostrarlo una vez finalice el proceso, podemos combinar ambas cosas y tener algo como esto:
<?php crear(); //Creamos el archivo leer(); //Luego lo leemos //Para crear el archivo function crear(){ $xml = new DomDocument('1.0', 'UTF-8'); $biblioteca = $xml->createElement('biblioteca'); $biblioteca = $xml->appendChild($biblioteca); $libro = $xml->createElement('libro'); $libro = $biblioteca->appendChild($libro); // Agregar un atributo al libro $libro->setAttribute('seccion', 'favoritos'); $autor = $xml->createElement('autor','Paulo Coelho'); $autor = $libro->appendChild($autor); $titulo = $xml->createElement('titulo','El Alquimista'); $titulo = $libro->appendChild($titulo); $anio = $xml->createElement('anio','1988'); $anio = $libro->appendChild($anio); $editorial = $xml->createElement('editorial','Maxico D.F. - Editorial Grijalbo'); $editorial = $libro->appendChild($editorial); $xml->formatOutput = true; $el_xml = $xml->saveXML(); $xml->save('libros.xml'); //Mostramos el XML puro echo "<p><b>El XML ha sido creado.... Mostrando en texto plano:</b></p>". htmlentities($el_xml)."<br/><hr>"; } //Para leerlo function leer(){ echo "<p><b>Ahora mostrandolo con estilo</b></p>"; $xml = simplexml_load_file('libros.xml'); $salida =""; foreach($xml->libro as $item){ $salida .= "<b>Autor:</b> " . $item->autor . "<br/>". "<b>Título:</b> " . $item->titulo . "<br/>". "<b>Ano:</b> " . $item->anio . "<br/>". "<b>Editorial:</b> " . $item->editorial . "<br/><hr/>"; } echo $salida; } ?>
Excelente información. Me serviría mucho para un sistema de ventas :) Gracias
ResponderEliminarMuchas gracias por la información
ResponderEliminarcon jquery no podría hacerse en vez de DOM?
ResponderEliminarSi, pudieras leerlo con jQuery sin problemas, es solo un ejemplo utilizando PHP.
EliminarBuen aporte, pero como seria de ponerle atributos a las etiquetas ejemplo e probado con esto $xml->writeAttribute('version', '1.0'); pero me da error.
ResponderEliminarSiguiendo con el ejemplo coloca justo después de agregar el libro a la biblioteca (append) lo siguiente: $libro->setAttribute('seccion', 'favoritos');... Igual ya he modificado el post, gracias por el comentario!
EliminarMe ha servido el codigo tal cual esta. Gracias por el aporte
ResponderEliminargracias buen tutorial
ResponderEliminarel atributo standalone="no" de xml como lo puedo ingresar ?
ResponderEliminarDebido a que es una propiedad lo puedes setear de la siguiente forma:
ResponderEliminar$xml->xmlStandalone = false;
Muchas Gracias por tan excelente articulo que ha compartido sobre creacion y lectura de xml, felicitandole por su aporte para los que estamos aprendiendo a programar, de esta manera talves en una proxima oportunidad nos pudiera ayudar con temas de facturacion electronica en php....gracias y saludos
ResponderEliminar