Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


XPath json-to-xml

Zusammenfassung:

json-to-xml konvertiert JSON in XML.

XPath json-to-xml

Nehmen wir als Beispiel den folgenden JSON-String, der wesentliche Javascript-Typdefinitionen (Zahl, Array, String, Boolean) bereits vorwegnimmt.

{
     "a": 1, 
     "b": [3,6,9], 
     "LN": "Rielos", 
     "FN": "Lotte", 
     "IsFemale":true
}

Für den direkten Aufruf in XSLT 3.0 und der "json-to-xml"-Funktion habe ich den JSON-String leicht angepaßt:

<xsl:copy-of select="json-to-xml('
   {
     &quot;a&quot;: 1, 
     &quot;b&quot;: [3,6,9], 
     &quot;LN&quot;: &quot;Rielos&quot;, 
     &quot;FN&quot;: &quot;Lotte&quot;, 
     &quot;IsFemale&quot;:true
   }
')"/>

Die "json-to-xml"-Funktion erkennt die Javascript-Datentypen automatisch und erzeugt entsprechende Start-und Endetags im Namespace "http://www.w3.org/2013/XSL/json". Die Namen der Datenfelder finden wir durchweg im Attribut "key" wieder. Das Ergebnis dürfte überzeugen:

<j:map xmlns:j="http://www.w3.org/2013/XSL/json">
    <j:number key="a">1</j:number>
    <j:array key="b">
        <j:number key="3">3</j:number>
        <j:number key="3">6</j:number>
        <j:number key="3">9</j:number>
    </j:array>
    <j:string key="LN">Rielos</j:string>
    <j:string key="FN">Lotte</j:string>
    <j:boolean key="IsFemale">true</j:boolean>
</j:map>

Noch einfacher ist der Aufruf für ein separates JSON-Dokument, in diesem Fall "json1.txt" (wichtig: xsl:copy-of, nicht xsl:value-of, da sonst lediglich die Textinhalte wiedergegeben werden). Wenn "json1.txt" den folgenden Inhalt hat:

[{"id":"1","name":"Holzflos","vorname":"Hugo"},
{"id":"2","name":"Sagblos","vorname":"Stefan"},
{"id":"8","name":"Rhodos","vorname":"Rudi"},
{"id":"15","name":"Kolos","vorname":"Karl"},
{"id":"19","name":"Lustlos","vorname":"Ludwig"},
{"id":"10","name":"Ruhelos","vorname":"Rita"},
{"id":"11","name":"Schlaflos","vorname":"Susi"},
{"id":"12","name":"Rielos","vorname":"Lotte"},
{"id":"13","name":"Muehelos","vorname":"Martin"},
{"id":"14","name":"Leinenlos","vorname":"Liane"}]

... dann ergibt der Aufruf von ...

<xsl:copy-of select="json-to-xml(unparsed-text('json1.txt'))"/>

... dieses (gekürzte) Ergebnis:

<j:array xmlns:j="http://www.w3.org/2013/XSL/json">
   <j:map>
      <j:string key="id">1</j:string>
      <j:string key="name">Holzflos</j:string>
      <j:string key="vorname">Hugo</j:string>
   </j:map>
   <!-- alle weiteren Ergebnisse bis: -->
   <j:map>
      <j:string key="id">14</j:string>
      <j:string key="name">Leinenlos</j:string>
      <j:string key="vorname">Liane</j:string>
   </j:map>
</j:array>

Dadurch, daß die "id" in JSON als String definiert wurde ("id":"1"), wurde sie auch im XML-Ergebnis als j:string ausgegeben.

qrpic/json_to_x_m_l.jpg

wg / 14. Oktober 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info10@wilfried-grupe.de