Convertir clase en XML con PHP

Hola tyros!, yo de nuevo.

Hoy voy a compartirles mi código PHP para convertir una clase en XML. Es muy fácil de usar y de extender. Aquí les dejo el código:

<?php
/*
 * Class to convert Class to XML
 */

/**
 * Description of ClassToXML
 *
 * @author tyrodeveloper
 */
class ClassToXML {

    private $xml = null;

    function Convert($object) {
        //Create DOMDocument
        $this->xml = new DOMDocument('1.0', "UTF-8");
        //Add the Class Element
        $xmlElement = $this->xml->createElement(get_class($object));
        //Add XSI
        $domAttribute = $this->xml->createAttribute('xmlns:xsi');
        $domAttribute->value = 'http://www.w3.org/2001/XMLSchema-instance';
        $xmlElement->appendChild($domAttribute);
        //Add the root Element
        $this->xml->appendChild($xmlElement);
        //Start Add elements
        $this->ReadProperty($xmlElement, $object);
        //Create the XML
        return $this->xml->saveXML();
    }

    private function ReadProperty($xmlElement, $object) {
        foreach ($object as $key => $value) {
            if ($value != null) {
                if (is_object($value)) {
                    $element = $this->xml->createElement($key);
                    $this->ReadProperty($element, $value);
                    $xmlElement->AppendChild($element);
                } elseif (is_array($value)) {
                    $this->ReadProperty($xmlElement, $value);
                } else {
                    $this->AddAttribute($xmlElement, $key, $value);
                }
            }
        }
    }

    private function AddAttribute($xmlElement, $key, $value) {
        $domAttribute = $this->xml->createAttribute($key);
        $domAttribute->value = $value;
        $xmlElement->appendChild($domAttribute);
    }

}


Ahora, veamos como usarla.

Primero, una clase PHP:

<?php

/*
 * Permisos a la carpeta donde se van a grabar los archivos
 * Paso 1:
 * sudo chown -R _www:staff /Users/gabriel.castillo/Sites/ejemplos/archivos
 * Paso 2:
 * sudo chmod -R 755 /Users/gabriel.castillo/Sites/ejemplos/archivos
 */

/**
 * Description of Persona
 *
 * @author tyrodeveloper
 */
class Persona {

    public function __construct() {
        $this->Domicilio = new Domicilio();
    }

    public $nombre = null;
    public $apellidos = null;
    public $telefono = null;
    public $Domicilio = null;

}

/**
 * Description of Persona
 *
 * @author tyrodeveloper
 */
class Domicilio {

    public $calle = null;
    public $numero = null;

}


Ahora, una página PHP:

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<?php
error_reporting(E_ALL & ~E_DEPRECATED);
ini_set("display_errors", 1);
include_once("app-code/Persona.php");
include_once("app-code/ClassToXML.php");
?>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>Convertir clase en XML</h1>
        <form action="clase-a-xml.php?convertir=1" method="post">
            Nombre:<br />
            <input type="text" name="txtNombre" required="true" />
            <br />
            Apellidos:<br />
            <input type="text" name="txtApellidos" />
            <br />
            Telefono:<br />
            <input type="text" name="txtTelefono" />
            <br />
            Calle:<br />
            <input type="text" name="txtCalle" />
            <br />
            Numero:<br />
            <input type="text" name="txtNumero" />
            <br /><br />
            <input type="submit" value="Convertir" />
        </form>
        <hr />
        <?php
        $convertir = null;
        if ($_GET) {
            $convertir = $_GET["convertir"];
        }
        if ($convertir == 1) {
            if ($_POST) {
                $persona = new Persona();
                $persona->nombre = $_POST["txtNombre"];
                $persona->apellidos = $_POST["txtApellidos"];
                $persona->telefono = $_POST["txtTelefono"];
                //Domicilio
                $domicilio = new Domicilio();
                $domicilio->calle = $_POST["txtCalle"];
                $domicilio->numero = $_POST["txtNumero"];
                $persona->Domicilio = $domicilio;
                //Generar xml
                $fileName = "./archivos/xml.xml"; //Nombre del archivo XML
                $convertidor = new ClassToXML();
                file_put_contents($fileName, $convertidor->Convert($persona));

                echo "<a href='clase-a-xml.php'>Volver a Generar XML</a>";
                echo "<br />";
                echo "<a href='$fileName' target='_blank'>Abrir XML</a>";
            }
        }
        ?>
    </body>
</html>

Video de Ejemplo:

No hay comentarios:

Publicar un comentario