@nodecfdi/xml-schema-validator
Esta es una librería para validar archivos XML a través de multiples Esquemas XSD acorde a sus definiciones.
- Recibe un string xml válido con el contenido a ser evaluado.
- Escanear el archivo por cada schemaLocation.
- Generar un esquema que incluya todos los esquemas.
- 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:
npm i @nodecfdi/xml-schema-validator --save
pnpm add @nodecfdi/xml-schema-validator
yarn add @nodecfdi/xml-schema-validator
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 filesconst 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 Documentconst documentParse = getParser().parseFromString(contents, MIME_TYPE.XML_TEXT);const validator = new SchemaValidator(docParse);
// change schemas collection to override the schema location of a specific namespaceconst schemas = validator.buildSchemas();schemas.create('http://example.org/schemas/x1', './local-schemas/x1.xsd');
// validateWithSchemas does not return boolean, it throws an exceptiontry { validator.validateWithSchemas(schemas);} catch (e) { console.info(`Found error: ${e.message}`);}
// or validate with booleanif (!validator.validate(schemas)) { console.info(`Found error: ${validator.getLastError()}`);}