Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / PHP / Validación XML con Esquema XSD en PHP

Validación XML con Esquema XSD en PHP

Autor jc mouse jueves, febrero 14, 2019

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?

  • Netebans 8.2 Es el IDE que utilizaremos, si tu usas otro IDE no hay ningún problema
  • Archivos XML a validar y esquema de validación XSD. Estos archivos los usaremos de otro post “Validación XSD en Java“.
  • Conocimientos sobre XML y XSD
  • PHP 7

En tu IDE crea un nuevo proyecto con el nombre de “ValidacionXSD” con los siguientes archivos

proyecto php

  • MiEsquema.xsd Es el esquema con el cual se validara el archivo XML
  • Mi Formulario.xml El Archivo XML a validar
  • ValidacionXSD.php La clase que implementara los métodos de validación
  • index.php

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('&nbsp;', 6) . "Linea: $error->line<br>"
                    . str_repeat('&nbsp;', 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:

XSD Errores

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Pruebas instrumentadas con Espresso

Pruebas instrumentadas con Espresso

Espresso es un framework de testing propiedad de Google que está dirigido a desarrolladores que creen que las pruebas au...

JSON Web Tokens: Teoría y práctica

JSON Web Tokens: Teoría y práctica

En este post aprenderemos lo que es un JSON Web Token, como crear nuestro propio token de acceso y como usarlo en un Ser...

Mejora tu memoria con esta fuente diseñada por científicos

Mejora tu memoria con esta fuente diseñada por científicos

Sans Forgetica es una fuente diseñada utilizando los principios de la psicología cognitiva para ayudar a recordar mejor...

Microsoft Windows XP finalmente a muerto

Microsoft Windows XP finalmente a muerto

Windows XP fue lanzado oficialmente el 25 de octubre de 2001, han pasado ya 17 años y 7 meses convirtiendo así a XP uno...

Buscar y cargar imagenes de disco

Buscar y cargar imagenes de disco

Cuando se almacenan imágenes en una aplicación java y se desea después a modo de registro buscar estas y cargarlas en al...

Generar reportes con origen de datos JSON

Generar reportes con origen de datos JSON

JSON es un formato de texto ligero para el intercambio de datos ampliamente usado en los Servicios Web. En este post uti...

1 comentario en “Validación XML con Esquema XSD en PHP”

  1. Armando dice:

    Muy util, muchas gracias, por favor podrias hacer una guia para c#, Gracias de antemano

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Acierta los colores o Adivina los colores es un sencillo juego que consiste en que dado 6 colores “rojo”,...

“MyBatis es una herramienta de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacena...

MyBatis es un framework de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacenados a part...

Webcam Capture es un API  que permite usar una cámara web incorporada o externa directamente desde código Java utilizand...

Herramientas

Generador de Enlaces a Whatsapp