xmlsjon converts XML into Python dictionary structures (trees, like in JSON) and vice-versa.
Project description
xmlsjon converts XML into Python dictionary structures (trees, like in JSON) and vice-versa.
About
XML can be converted to a data structure (such as JSON) and back. For example:
<employees> <person> <name value="Alice"/> </person> <person> <name value="Bob"/> </person> </employees>
can be converted into this data structure (which also a valid JSON object):
{ "employees": [ { "person": { "name": {"@value": "Alice"} } }, { "person": { "name": {"@value": "Alice"} } } ] }
This uses the BadgerFish convention that prefixes attributes with @. Other conventions supported by this library are:
BadgerFish: Use "$" for text content, @ to prefix attributes,
GData: Use "$" for text content, ignore attributes
Parker: Ignore attributes and text content
Usage
To convert from a data structure to XML using the BadgerFish convention:
>>> from xmljson import badgerfish as bf >>> bf.etree({'p': {'@id': 'main', '$': 'Hello', 'b': {'$': 'bold'}}})
This returns an array of etree.Element structures. In this case, the result is identical to:
>>> from xml.etree.ElementTree import fromstring >>> [fromstring('<p id="main">Hello<b>bold</b></p>')]
The result can be inserted into any existing root etree.Element:
>>> from xml.etree.ElementTree import Element, tostring >>> root = Element('root') >>> result = bf.etree({'p': {'@id': 'main'}}, root=root) >>> tostring(result) <root><p id="main"/></root>
To convert from XML to a data structure using the BadgerFish convention:
>>> bf.data(fromstring('<p id="main">Hello<b>bold</b></p>')) {"p": {"$": "Hello", "@id": "main", "b": {"$": "bold"}}}
To convert this to JSON, use:
>>> from json import dumps >>> dumps(bf.data(fromstring('<p id="main">Hello<b>bold</b></p>'))) '{"p": {"b": {"$": "bold"}, "@id": "main", "$": "Hello"}}'
To preserve the order of attributes and children, specify the dict_type as OrderedDict (or any other dictionary-like type) in the constructor:
>>> from collections import OrderedDict >>> from xmljson import BadgerFish # import the class >>> bf = BadgerFish(dict_type=OrderedDict) # pick dict class
To use a different conversion method, replace BadgerFish with one of the other classes. Currently, these are supported:
>>> from xmljson import badgerfish # == xmljson.BadgerFish() >>> from xmljson import gdata # == xmljson.GData() >>> from xmljson import parker # == xmljson.Parker()
Installation
This is a pure-Python package built for Python 2.6+ and Python 3.0+. To set up:
pip install xmljson
Roadmap
Test cases for most HTML and XML scenarious across conventions
Test cases for Unicode
Support for namespaces and namespace prefixes
History
0.1.0 (2015-09-15)
Two-way conversions via BadgerFish, GData and Parker conventions.
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for xmljson-0.1.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a5c691887619b152687a72ecaca000ffcf783d3a5cc31183d956e4f221c41ab |
|
MD5 | 5734e7bfa9489daaa9cf9bd75aedac83 |
|
BLAKE2b-256 | 0efd33acdd3a88b7803a954a43260b682f75c979b5122f885483d9553105d821 |