Saltearse al contenido

@nodecfdi/xml-schema-validator

Esta es una librería para validar archivos XML a través de multiples Esquemas XSD acorde a sus definiciones.

  1. Recibe un string xml válido con el contenido a ser evaluado.
  2. Escanear el archivo por cada schemaLocation.
  3. Generar un esquema que incluya todos los esquemas.
  4. Validar el xml nuevamente con el esquema generado.

Librería inspirada por la versión para php https://github.com/eclipxe13/XmlSchemaValidator

Primeros pasos

Está libreria depende estrictamente de @nodecfdi/cfdi-core por lo que es recomendable instalarla previo a instalar la libreria xml-schema-validator.

Instalación

Para comenzar a utilizar la libreria lo primero que hay que hacer es instalarla, corre el siguiente comando en tu terminal:

Ventana de terminal
npm i @nodecfdi/xml-schema-validator --save

Con esto ya tendremos la libreria instalada y lista para ser usada.

Uso básico

Ejemplo básico

import { readFileSync } from 'node:fs';
import { SchemaValidator } from '@nodecfdi/xml-schema-validator';
const contents = readFileSync('example.xml', 'binary');
// Expect references on schemaLocations are locally files
const validator = SchemaValidator.createFromString(contents);
if (!validator.validate()) {
console.info(`Found error: ${validator.getLastError()}`);
}

Ejemplo avanzado

import { readFileSync } from 'node:fs';
import { SchemaValidator } from '@nodecfdi/xml-schema-validator';
import { getParser, MIME_TYPE } from '@nodecfdi/cfdi-core';
const contents = readFileSync('example.xml', 'binary');
// create SchemaValidator using a Document
const documentParse = getParser().parseFromString(contents, MIME_TYPE.XML_TEXT);
const validator = new SchemaValidator(docParse);
// change schemas collection to override the schema location of a specific namespace
const schemas = validator.buildSchemas();
schemas.create('http://example.org/schemas/x1', './local-schemas/x1.xsd');
// validateWithSchemas does not return boolean, it throws an exception
try {
validator.validateWithSchemas(schemas);
} catch (e) {
console.info(`Found error: ${e.message}`);
}
// or validate with boolean
if (!validator.validate(schemas)) {
console.info(`Found error: ${validator.getLastError()}`);
}