Voici un script Python qui permet de convertir en XML un contenu JSON et/ou un dictionnaire de données Python.
Quelques exemples d'utilisations:
En ligne de commande (BASH par exemple) avec un pipe et un flux JSON via CURL:
# curl "http://api.geonames.org/citiesJSON?formatted=true&north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo&style=full" -o - -s | python3 ToXml.py
<?xml version="1.0" ?>
<XML>
<geonames>
<name>Mexiko-Stadt</name>
<countrycode>MX</countrycode>
<geonameId>3530597</geonameId>
<toponymName>Mexico City</toponymName>
<wikipedia>en.wikipedia.org/wiki/Mexico_City</wikipedia>
<fclName>city, village,...</fclName>
<fcode>PPLC</fcode>
<lat>19.428472427036</lat>
<lng>-99.12766456604</lng>
<fcl>P</fcl>
<fcodeName>capital of a political entity</fcodeName>
<population>12294193</population>
</geonames>
<geonames>
<name>Peking</name>
<countrycode>CN</countrycode>
<geonameId>1816670</geonameId>
<toponymName>Beijing</toponymName>
<wikipedia>en.wikipedia.org/wiki/Beijing</wikipedia>
<fclName>city, village,...</fclName>
<fcode>PPLC</fcode>
<lat>39.9074977414405</lat>
<lng>116.397228240967</lng>
<fcl>P</fcl>
<fcodeName>capital of a political entity</fcodeName>
<population>11716620</population>
</geonames>
</XML>
Utilisé avec un pipe, seul un flux JSON est autorisé.
Sinon, en important la classe dans un script Python:
A partir d'un fichier:
# cat flux.json
{
"un": "one",
"deux": "two",
" 3": "three",
"4": "four"
}
Code Python:
>>> from ToXml import ToXml
>>> toxml = ToXml()
>>> toxml.fromjson('flux.json')
>>> print(toxml.topretty())
<?xml version="1.0" ?>
<XML>
<XMLNODE v="3">three</XMLNODE>
<XMLNODE v="4">four</XMLNODE>
<un>one</un>
<deux>two</deux>
</XML>
>>>
A partir d'une chaine de texte représentant un contenu JSON:
>>> from ToXml import ToXml
>>> s = '{" 3": "three", "4": "four", "un": "one", "deux": "two"}'
>>> toxml = ToXml()
>>> toxml.fromjsons(s)
>>> print(toxml.topretty())
<?xml version="1.0" ?>
<XML>
<XMLNODE v="3">three</XMLNODE>
<XMLNODE v="4">four</XMLNODE>
<un>one</un>
<deux>two</deux>
</XML>
>>>
A partir d'un dictionnaire de données:
>>> from ToXml import ToXml
>>> d = {' 3': 'three', '4': 'four', 'un': 'one', 'deux': 'two'}
>>> type(d)
<class 'dict'>
>>> toxml = ToXml()
>>> toxml.fromdict(d)
>>> print(toxml.topretty())
<?xml version="1.0" ?>
<XML>
<XMLNODE v="3">three</XMLNODE>
<XMLNODE v="4">four</XMLNODE>
<un>one</un>
<deux>two</deux>
</XML>
>>>
Et enfin, une fonction permettant d'enregistrer le contenu XML dans un fichier:
>>> toxml.tofile('flux.xml')
# cat flux.xml
<?xml version="1.0" ?>
<XML>
<XMLNODE v="3">three</XMLNODE>
<XMLNODE v="4">four</XMLNODE>
<un>one</un>
<deux>two</deux>
</XML>
N'hésitez pas à laisser vos avis.
J'ai essayé de documenter le code au maximum mais au cas où ...