How to convert xml content into json using xmltodict

MicroPyramid
2 min readNov 9, 2017

--

xmltodict is a python package which is used to convert XML data into JSON and vice versa.

Within a less span of time, we can also process large amounts of data and get the desired results.

Installation:    pip install xmltodict

It supports both python2.7, 3.4 versions

Advantages over other packages:

1. No need to process each node in XML document to get the results
2. Easy to convert complex XML data into JSON
3. It’s user-friendly

Converting XML to a dictionary:

>>> import xmltodict>>> import json>>> json.loads(json.dumps(xmltodict.parse('''     <root>       <persons city="hyderabad">         <person name="abc">           <name age="50" mobile="789" />         </person>       </persons>       <persons city="vizag">            <username></username>         <person name="xyz">           <name age="70" mobile="123" />         </person>       </persons>     </root>     '''))){u'root': {u'persons': [{u'@city': u'hyderabad', u'person': {u'@name': u'abc', u'name': {u'@mobile': u'789', u'@age': u'50'}}}, {u'@city': u'vizag', u'person': {u'@name': u'xyz', u'name': {u'@mobile': u'123', u'@age': u'70'}}}]}}

Converting dictionary to XML:

>>> xmltodict.unparse({u'root': {u'persons': [{u'@city': u'hyderabad', u'person': {u'@name': u'abc', u'name': {u'@mobile': u'789', u'@age': u'50'}}}, {u'@city': u'vizag', u'person': {u'@name': u'xyz', u'name': {u'@mobile': u'123', u'@age': u'70'}}}]}})u'<?xml version="1.0" encoding="utf-8"?>\n<root><persons city="hyderabad"><person name="abc"><name mobile="789" age="50"></name></person></persons><persons city="vizag"><person name="xyz"><name mobile="123" age="70"></name></person></persons></root>'

Text values for nodes can be specified with the `cdata_key` key in the python dict, while node properties can be specified with the `attr_prefix` prefixed to the key name in the python dict. The default value for `attr_prefix` is `@` and the default value for `cdata_key` is `#text`.

By passing `process_namespaces=True` will make it expand namespaces for xml data in json data.

>>> import xmltodict>>> import json>>> json.loads(json.dumps(xmltodict.parse('''     <root>       <persons city="hyderabad">         <person name="abc">           <name age="50" mobile="789" />         </person>       </persons>       <persons city="vizag">         <person name="xyz">           <name age="70" mobile="123" />         </person>       </persons>     </root>     ''', process_namespaces=True)))>>> mydict = {u'root': {u'persons': [{u'@city': u'hyderabad', u'person': {u'@name': u'abc', u'name': {u'@mobile': u'789', u'@age': u'50'}}}, {u'@city': u'vizag', u'person': {u'@name': u'xyz', u'name': {u'@mobile': u'123', u'@age': u'70'}}}]}}>>> print xmltodict.unparse(mydict, pretty=True)

The article was originally published at MicroPyramid blog

--

--

MicroPyramid
MicroPyramid

Written by MicroPyramid

Python, Django, Android and IOS, reactjs, react-native, AWS, Salesforce consulting & development company

Responses (2)