Creazione XML - client based

Ciao a tutti,

sto sviluppando una web-app per la fatturazione elettronica verso privati con Vue.js ed ora mi trovo a dover creare l’XML. Non avendo implementato la parte server dell’applicazione (prevedo l’invio tramite email), non ho trovato un modo per creare l’XML senza ricorrere a un server. Ho provato a far funzionare Nunjucks ma sembra non andare!

Qualcuno ha avuto lo stesso problema e riesce a dirmi come fare?

io ho fatto tutto in php e funziona alla grande
Nel forum furono pubblicati dei codici molto utili presenti su github

Eh va bene, ma con php come faccio a crealo client based? non richiede pure la parte server?

non conosco vue.js ma se vuoi realizzare un XML lato client non devi far altro che creare una variabile ed associare “testo” fino al completamento.
oppure puoi utilizzare qualche funzione nativa per creare un documento preformato e poi richiamare le singole sezioni per aggiungere dati.

la soluzione in PHP che ti ha suggerito @lucaange non è sbagliata. anche se php è lato server, puoi comunque leggere il codice e convertirlo in js o jquery o eventuali librerie lato client per la generazione di xml (se ci sono)

se invece vuoi una libreria che ti faccia la fattura italiana in XML … non credo che ci sia.

Come ha detto @daniele_m, non c’e’ una libreria JS che permetta di gestire le fatture elettroniche.
Quello che potresti fare, senza dover mettere su un server, puo’ essere:

  • implementare una tua libreria JS

o

AWS Lambda non supporta PHP nativamente, ma ci sono metodi “non ufficiali”: https://akrabat.com/serverless-php-on-aws-lamda/

Ciao a tutti,
volevo segnalare che in questi giorni sto implementando una soluzione full-stack in typescript e uno dei moduli che ho sviluppato è un parser FatturaPA XML=>JSON/JS e JSON/JS => XML.
Il modulo usa sotto il cofano la velocissima libreria fast-xml-parser (che essendo estremamente lightweight funziona bene sia lato client che server) a cui ho aggiunto alcune tweak specifiche per la fattura elettronica. E’ ancora WIP e devo documentarlo e pubblicarlo su npm ma per chiunque fosse interessato ad utilizzarlo, testarlo o contribuire allo sviluppo, i sorgenti sono su Gitlab ed è possibile installarlo come dipendenza tramite semplice yarn add https://gitlab.com/digitalia/fatturapa.git.

Ciao!

Alla fine sto usando https://github.com/oozcitak/xmlbuilder-js e sembra workare anche se non proprio comodissimo. Ora dovrei validarlo con xmlschema.

Ho dato un’occhiata al parser e sembra interessante. Domani lo guardo meglio. :slight_smile:

Ciao Vincenzo,
ho dato uno sguardo al pacchetto che hai linkato ma da un primo test che ho fatto la velocità di parsing JS => XML non mi è sembrata eccelsa (circa 7x-9x volte il tempo impiegato da fast-xml).

Il pacchetto stesso pesa il doppio quindi c’è sia un tempo maggiore in caricamento della libreria lato client sia di parsing e questo se non è un gran problema lato client, lo è decisamente lato server se hai molti documenti da generare.

Inoltre non ha la possibilità di fare la conversione anche da XML a JSON, ma ho trovato la sua implementazione bidirezionale xml2js, che usa sotto il cofano il pacchetto da te indicato per la conversione JS=>XML e sax-js per quella XML=>JS.

Su questo ho effettuato entrambi i performance test che ho pubblicato su Gitlab utilizzando fatture XML reali sia firmate in P7m che non, con e senza file pdf allegati in formato base64 (dimensioni dei file da 10 a 100k) e mi sembrano corrispondere molto fedelmente ai benchmark pubblicati sul github di fast-xml-parser

Dal punto di vista della developer experience poi xml2js mi è sembrato a dir poco ostico, ogni chiave del file XML viene convertita come array di valori quindi si aggiunge l’ulteriore operazione di estrapolazione dei valori stringa, mentre fastxml genera un js con una gerarchia estremamente pulita che ne facilita il destructuring con es6 o la manipolazione tramite funzioni ricorsive in maniera disarmante.

Personalmente, dati alla mano e con un occhio puntato alla scalabilità e al volume di documenti da dover generare, ritengo quindi che una soluzione basata su fast-xml-parser sia di gran lunga migliore, poi ovviamente vanno valutati i casi specifici e le preferenze del developer.

Oggi comunque ho fatto degli aggiornamenti e pubblicato il modulo su npm, se hai tempo ti testarli, fammi sapere :wink:

PS : Riporto per completezza riporto il metodo usato per il performance test
let t0 = performance.now()
let invoice = funzioneParse(invoiceXML)
let t1 = performance.now()
console.log(‘Time to parse :’, t1-t0)

Ciao! Scusami se sono sparito.

Come da titolo si fa tutto sul client, quindi non è un problema di velocità.

Ora volevo vederlo un po’ ma dal link che hai messo è offline o hai cambiato i permessi per visionarlo.

Ciao Vincenzo,

proprio perchè si fa “tutto sul client”, se includi una libreria esterna che pesa il doppio, il client/browser dell’utente impiegherà più tempo per scaricarlo, avviare il parsing del codice ed eseguirlo. Una volta mandato in esecuzione, xml2js impiega da 4 a 7 volte il tempo impiegato dalla mia soluzione per trasformare i file XML, quindi il “problema di velocità” c’è tutto, sia dal punto di vista delle performance di rete, sia di quelle di esecuzione :wink:

Se vuoi testare le performance, puoi clonare il repo, creare all’interno della cartella /test due sottocartelle /test/data/xmlInvoices e /test/data/jsonInvoices, metterci dentro una cinquantina di file XML e JSON, e vedere tu stesso i tempi di conversione. I miei risultati li trovi QUI

La libreria è stata rinominata, ho aggiornato i link in questo thread e pubblicato un thread a parte sul forum => Nuova libreria gestione FatturaPA in TypeScript/JavaScript

Saluti

Pomeriggio la scarico e la provo per il progetto. La utilizzerò per la creazione degli xml, la conversione al momento non mi interessa.

tip: quando puoi aggiungi qualche altro esempio nel wiki :slight_smile: :wink: