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!!!
En esta oportunidad dejamos las fuentes del Generador de Código de Control de Impuestos Bolivia (Facturación Virtual), e[...]
En este tutorial veremos lo fácil que es personalizar las pestañas de un JTabbedPane con unas cuantas lineas de código y[...]
Mangle es el lenguaje de programación de código abierto desarrollado por el gigante tecnológico Google presentado este a[...]
¿Estas buscando fondos animados para tus sitios web? Animated BG es un sitio web donde puedes encontrar cientos de fondo[...]
Google abre las puertas de Google Open Source un nuevo sitio web que une todos sus proyectos de «Código Abierto» que ha[...]
Python es un lenguaje de programación interpretado, de programación multiparadigma, ya que soporta orientación a objeto[...]