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

PixilArt: Arte con pixeles

PixilArt: Arte con pixeles

pixilart no es solo una herramienta online sino una comunidad de diseñadores a quienes les encanta el arte hecha con «pi...

Listar dispositivos de impresión

Listar dispositivos de impresión

El siguiente código te muestra una lista de los dispositivos de impresión que tenemos instalado en el sistema import jav...

Conversor decimal a binario

Conversor decimal a binario

Desde que Google anuncio de que dejara de dar soporte al plugin de Eclipse y se concentrara en Android Studio, quienes t...

Personalización de Componentes Swing Java I

Personalización de Componentes Swing Java I

Hace tiempo pidieron un video tutorial sobre como crear sus propios componentes swing java, lamentablemente debo decir q...

Sumar 2 numeros

Sumar 2 numeros

Una vez que terminamos el obligatorio 🙂 «Hola mundo«, podemos crear aplicaciones un tanto más elaboradas, pero para nada...

Crea un Themes WordPress con Netbeans – Configuracion

Crea un Themes WordPress con Netbeans – Configuracion

Este post te enseña una manera que tengo de configurar Netbeans para crear y ejecutar un proyecto php utilizando el CMS...

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

Melody.ml  es un aplicación online que usa la I.A (Inteligencia Artificial) para procesar archivos MP3 y separar en pist...

Small Basic es un lenguaje de programación propiedad de Microsoft creado especialmente para ayudar a los estudiantes a p...

Lorca Editor es una aplicación online creada por el desarrollador español Domingo Martin el cual tiene como objetivo el...

Eratóstenes era un matemático griego del siglo  III a.C. el cual ideó una manera rápida de obtener todos los números pri...

Herramientas

Generador de Enlaces a Whatsapp