Come convertire json in xml usando xslt

Come convertiresti JSON in XML?

Prendere in considerazione:

 { "Order": { "InvestmentAccount": { "AccountNumber": "10" }, "Parcel": { "Limit": "0", "ExpiryDate": "1900-01-01T00:00:00", "Asset": [ { "Open": "25.15", "High": "25.15", "Low": "25.11", "Close": "25.87" } { "Open": "25.15", "High": "25.15", "Low": "25.11", "Close": "25.87" }] }, "OrderDate": "2012-10-11T21:46:03.6489906+11:00", } }  

Dopo la trasformazione, il documento è il seguente:

   10   0 1900-01-01T00:00:00  25.15 25.15 25.11 25.87   25.15 25.15 25.11 25.87   2012-10-11T21:46:03.6489906+11:00  

    Il mio lavoro sull’analisi di JSON non copre la grammatica JSON completa.

    E il compito di “tradurre” qualsiasi documento JSON in un documento XML non ha una soluzione. Esistono costrutti JSON, che non possono essere tradotti in XML senza definire convenzioni aggiuntive e introducendo elementi aggiuntivi, quindi la struttura finale XML non è una rappresentazione vera e naturale dell’object JSON originale.

    In XSLT 3.0 c’è una funzione per analizzare qualsiasi object JSON – parse-json () – in una mappa – un nuovo tipo di dati introdotto in XSLT 3.0. Leggi questo qui: http://www.w3.org/TR/xslt-30/#json

    In realtà, non è così difficile. Il modo per avvicinarsi è esaminare la syntax di jason e visualizzare ogni produzione come se fosse un modello. Stavo per scrivere una soluzione, quando ho considerato la possibilità che l’OP si dimenticasse di google per soluzioni preesistenti. Ho cercato e lo ed ecco …

    AGGIORNARE

    Ecco un convertitore da JSon a XML. Ma funziona solo su un sottoinsieme di JSON. Si spera che il sottoinsieme sia sufficientemente ampio per le vostre esigenze particolari. In particolare le limitazioni sono:

    1. L’unico tipo semplice supportato è una stringa. Nessun numero intero, booleano o nullo.
    2. I nomi degli oggetti Json devono essere validi nomi di elementi xml.
    3. Nessun codice di escape consentito all’interno di valori stringa. Ciò significa che non puoi trasportare valori che includono, ad esempio, il “carattere” (senza far ruotare il tuo livello di codifica).

    Questo foglio di stile XSLT 1.0 … *

                                                                                                                                                                                 ERROR                     

    … applicato a questo input (modificato da OP fornito per rimuovere una virgola estranea) …

      { "Order": { "InvestmentAccount": { "AccountNumber": "10" }, "Parcel": { "Limit": "0", "ExpiryDate": "1900-01-01T00:00:00", "Asset": [ { "Open": "25.15", "High": "25.15", "Low": "25.11", "Close": "25.87" } { "Open": "25.15", "High": "25.15", "Low": "25.11", "Close": "25.87" }] }, "OrderDate": "2012-10-11T21:46:03.6489906+11:00" } }  

    ..yields …

       10   0 1900-01-01T00:00:00  25.15 25.15 25.11 25.87   25.15 25.15 25.11 25.87   2012-10-11T21:46:03.6489906+11:00  

    Ho modificato leggermente il modello di Sean B. Durkin e ho pensato di condividerlo.

    Gli aggiornamenti includono:

    • Supporto per i numeri
    • Supporto per i booleani
    • Correzione per gli elementi dell’array di oggetti separati da una virgola (per specifica JSON)

    Modifiche non aggiornate:

    • Gli elementi dell’array vengono visualizzati nei propri elementi XML con il nome dell’elemento come la chiave dell’object con suffisso _element

    Ancora non supportato:

    • Caratteri sfuggiti (virgolette) nelle stringhe

    Ecco il modello:

                                                                                                                                                                                                                               ERROR                                                                                                     

    Quindi con questo input (corretto):

       

    Ottengo questo risultato:

        10   0 1900-01-01T00:00:00 true   25.15 25.15 25.11 25.87   25.15 25.15 25.11 25.87    2012-10-11T21:46:03.6489906+11:00  

    Oltre al framework di parsing XSLT di Dimitre, c’è anche il generatore di parser Rex di Gunther Rademacher, che include anche JSON come una delle sue grammatiche esemplificative:

    http://www.bottlecaps.de/rex/

    Prova questa lib:

    https://github.com/bramstein/xsltjson

    Sembra molto carino.

    È una soluzione XSLT 2.0, sebbene punti anche alla versione 1.0.

    La domanda è taggata per XSLT 1.0, quindi non so se questa risposta aiuterà la domanda originale. Ma se puoi usare XSLT 3.0, la funzione json-to-xml fa esattamente ciò di cui hai bisogno.

    https://www.w3.org/TR/xslt-30/#func-json-to-xml

    XSLT ha molti punti di forza e alcuni grandi punti deboli. L’elaborazione del testo è la sua debolezza almeno nella versione 1.0 Sebbene sarebbe tecnicamente ansible elaborare quel testo con XSLT 1.0, non posso pensare a nessuna situazione in cui sarebbe una buona idea e dove non sarebbe molto fragile conversione. Il codice che dovresti produrre sarebbe molto ingombrante.

    Non ci sono altre lingue disponibili per l’elaborazione?