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 este post mostramos como personalizar el Header (encabezado) de un componente JTable en Java colocando iconos, centra[...]
Material Design introduce una nueva forma de mostrar notificaciones al usuario, estos son los snackbar, similares a los[...]
Las aplicaciones para celulares inteligentes con sistema operativo Android, se distribuyen en archivos *.APK, si como pr[...]
Google AI Studio es una herramienta que permite simplificar la utilizacion de modelos de Inteligencia Artificialde Googl[...]
En este post iremos conociendo de un modo práctico que es y como se utiliza un Array en java, para esto partiremos de un[...]
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es[...]