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!!!
Código Único de Factura para el Nuevo Sistema de Facturación Electrónica en Bolivia desarrollado en el lenguaje PHP 7 (H[...]
Google abre las puertas de Google Open Source un nuevo sitio web que une todos sus proyectos de «Código Abierto» que ha[...]
En este post aprenderemos los pasos básicos para construir una aplicación android con soporte multilenguaje, utilizaremo[...]
¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames[...]
Este es una continuación de un tutorial pasado [Funciones en PostgreSQL y pgAdmin], así que si quieres entenderlo mucho[...]
simuladorasamblea.bo es una herramienta digital desarrollado por los Analistas de Datos Rafael López Valverde y Sergio[...]