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