@nodecfdi/cfdi-core
La motivación de crear esta librería es contar con una herramienta flexible, rápida y confiable para trabajar con CFDI.
Contiene parte de las estructuras de datos comun para trabajar un CFDI y/o representar un XML, ademas de proporcionar utilerias para convertir de un XML a un objeto manipulable y tambien a la inversa de un objeto manipulable a XML.
Primeros pasos
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/cfdi-core --save
pnpm add @nodecfdi/cfdi-core
yarn add @nodecfdi/cfdi-core
Con esto ya tendremos la libreria instalada y lista para ser usada.
Uso básico
Estructura de datos XmlNode
import { XmlNode } from '@nodecfdi/cfdi-core';
// Creación de un nodo con atributosconst node = new XmlNode('root', { id: '1' });console.info(node.children().length); // Output: 0console.info(node.attributes().size); // Output: 1
console.info(node.getAttribute('id')); // Output: '1'console.info(node.getAttribute('no-existe')); // Output: ''console.info(node.attributes().has('id')); // Output: trueconsole.info(node.attributes().has('no-existe')); // Output: false
node.setAttribute('key', 'value');console.info(node.getAttribute('key')); // Output: 'value'
node.attributes().delete('id');console.info(node.getAttribute('id')); // Output: ''console.info(node.attributes().has('id')); // Output: false
// Agregar nodo hijoconst childrenNode = new XmlNode('children');node.addChild(childrenNode);console.info(node.children().length); // Output: 1
// Recorrer la colección de atributosfor (const [key, value] of node.attributes()) { console.info(key, ': ', value);}
// Recorrer la coleccion de nodos hijosfor (const child of node) { console.info('Nodo: ', child.name());}
Xml importar y exportar
XmlNode a string XML
import { XmlNode, nodeToXmlString } from '@nodecfdi/cfdi-core';
const node = new XmlNode('book', {}, [ new XmlNode('chapter', { toc: '1' }), new XmlNode('chapter', { toc: '2' }),]);
const xmlString = nodeToXmlString(node, true);
El ejemplo anterior dará como resultado
<?xml version="1.0" encoding="UTF-8"?><book> <chapter toc="1"/> <chapter toc="2"/></book>
Xml a XmlNode
import { documentElement, newDocumentContent, nodeFromXmlElement } from '@nodecfdi/cfdi-core';
const xmlString = '<?xml version="1.0" encoding="UTF-8"?><book><chapter toc="1"/><chapter toc="2"/></book>';const xmlDoc = newDocumentContent(xmlString);const node = nodeFromXmlElement(documentElement(xmlDoc));
console.info(node.children().length); // Output: 2console.info(node.attributes().size); // Output: 0