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)
To Know more about our Django CRM(Customer Relationship Management) Open Source Package. Check Code