En este post realizaremos un pequeño ejemplo de validación de archivos XML utilizando el esquema XSD y el lenguaje PHP (acrónimo recursivo de PHP: Hypertext Preprocessor). Pero antes recordemos que es la «Validación de documentos XML» pues bien, validar un documento XML es comprobar que dicho documento está bien formado y se ajuste a una estructura definida ya sea bajo un DTD (Document Type Definition) o un XSD (XML Schema Definition)
¿Que necesitamos?
En tu IDE crea un nuevo proyecto con el nombre de «ValidacionXSD» con los siguientes archivos
Tanto el archivo MiEsquema.xsd como MiFormulario.xml están descritos en el post «Validacion XSD en Java» por lo que no entraremos a más detalles.
El código para ValidacionXSD.php es el siguiente:
<?php declare(strict_types = 1); /** * @see https://www.jc-mouse.net/ * @author mouse */ class ValidacionXSD { private $errors; private $doc; function __construct() { //Representa un documento HTML o XML en su totalidad; $this->doc = new \DOMDocument('1.0', 'utf-8'); } /** * @param String $filexml Archivo XML a validar * @param String $xsd Esquema de validacion * * @return bool TRUE El arcivo XML es valido * FALSE El archiv XML no es valido */ public function validar(string $filexml, string $xsd): bool { if (!file_exists($filexml) || !file_exists($xsd)) { echo "Archivo <b>$filexml</b> o <b>$xsd</b> no existe."; return false; } //Habilita/Deshabilita errores libxml y permite al usuario extraer //información de errores según sea necesario libxml_use_internal_errors(true); //lee archivo XML $myfile = fopen($filexml, "r"); $contents = fread($myfile, filesize($filexml)); $this->doc->loadXML($contents, LIBXML_NOBLANKS); fclose($myfile); // Valida un documento basado en un esquema if (!$this->doc->schemaValidate($xsd)) { //Recupera un array de errores $this->errors = libxml_get_errors(); return false; } return true; } /** * Retorna un string con los errores de validacion si es que existieran */ public function mostrarError(): string { $msg = ''; if ($this->errors == NULL) { return ''; } foreach ($this->errors as $error) { switch ($error->level) { case LIBXML_ERR_WARNING: $nivel = 'Warning'; break; case LIBXML_ERR_ERROR : $nivel = 'Error'; break; case LIBXML_ERR_FATAL: $nivel = 'Fatal Error'; break; } $msg .= "<b>Error $error->code [$nivel]:</b><br>" . str_repeat(' ', 6) . "Linea: $error->line<br>" . str_repeat(' ', 6) . "Mensaje: $error->message<br>"; } //Limpia el buffer de errores de libxml libxml_clear_errors(); return $msg; } function getErrors() { return $this->errors; } function setErrors($errors) { $this->errors = $errors; } }
Para terminar en el archivo index.php escribimos:
<?php require 'ValidacionXSD.php'; $valXSD = new ValidacionXSD(); if(!$valXSD->validar('MiFormulario.xml','MiEsquema.xsd')){ print $valXSD->mostrarError(); }
Si el archivo XML es valido no obtendremos nada por pantalla, caso contrario:
enjoy!!!
CSS Flexible Box Layout, comúnmente conocido como Flexbox, es un modelo de diseño web CSS que permite que los elementos[...]
La internacionalización permite a las aplicaciones adaptarse a los diferentes idiomas y regiones sin necesidad de cambio[...]
Comenzando este tutorial, primero necesitamos definir la «estructura» de nuestro proyecto. Haremos uso del IDE de Dreamw[...]
Realizar pruebas sobre nuestro código nos permiten comprobar su correcto funcionamiento e integración con otros módulos[...]
En este tutorial crearemos una aplicación android que nos permitirá abrir un PopupMenu de donde podremos seleccionar una[...]
Todo producto tecnológico tiene un ciclo de vida, algunos bastante corto otros muy largo, podemos mencionar el software[...]