XML as plain object module
Project description
xmlplain
XML as plain object utility module
Synopsys
This module is a set of utility functions for parsing XML input into plain list/dict/string types.
These plain XML objects in turn can be emitted through YAML for instance as bare YAML without python objects.
The motivating usage is to dump XML to YAML, manually edit files as YAML, and emit XML output back.
The original XML file is supposed to be preserved except for comments and (if requested) spaces between non-leaf elements.
Note that there are alternative modules with nearly the same functionality, but none of them both provide simple plain objects and preserve the initial XML content even for non structured XML.
WARNING: the implementation does not support XML namespaces and entity location. If this is found useful, please add an issue.
Usage
In order to convert a XML file to a YAML representation, for instance given
the tests/example-1.xml
file:
<example>
<doc>This is an example for xmlobj documentation. </doc>
<content version="beta">
<kind>document</kind>
<class>example</class>
<structured/>
<elements>
<item>Elt 1</item>
<doc>Elt 2</doc>
<item>Elt 3</item>
<doc>Elt 4</doc>
</elements>
</content>
</example>
Execute the following python3 code:
import xmlplain
# Read to plain object
with open("tests/example-1.xml") as inf:
root = xmlplain.xml_to_obj(inf, strip_space=True, fold_dict=True)
# Output plain YAML
with open("example-1.yml", "w") as outf:
xmlplain.obj_to_yaml(root, outf)
This will output the YAML representation in example-1.yml
:
example:
doc: 'This is an example for xmlobj documentation. '
content:
'@version': beta
kind: document
class: example
structured: ''
elements:
- item: Elt 1
- doc: Elt 2
- item: Elt 3
- doc: Elt 4
One can then read the emitted YAML representation and generate again an XML output with:
import xmlplain
# Read the YAML file
with open("example-1.yml") as inf:
root = xmlplain.obj_from_yaml(inf)
# Output back XML
with open("example-1.new.xml", "w") as outf:
xmlplain.xml_from_obj(root, outf, pretty=True)
This will output back the following XML (there may be some indentation and/or short empty elements differences w.r.t. the original):
<?xml version="1.0" encoding="UTF-8"?>
<example>
<doc>This is an example for xmlobj documentation. </doc>
<content version="beta">
<kind>document</kind>
<class>example</class>
<structured></structured>
<elements>
<item>Elt 1</item>
<doc>Elt 2</doc>
<item>Elt 3</item>
<doc>Elt 4</doc>
</elements>
</content>
</example>
For a detailled usage, read the API documentation with:
pydoc xmlplain
Or get to the online documentation at: https://guillon.github.io/xmlplain
Download
Download this module archives from the releases at: https://github.com/guillon/xmlplain/releases
Or get the git repository at: https://github.com/guillon/xmlplain
Requirements
The module is compatible with python 2.6/2.7
and python 3.x
.
It depends upon the folowing modules:
sudo pip install --user setuptools PyYAML
On deb systems one may install these modules with:
sudo apt-get install python-setuptools python-yaml
Installation
Either copy the xmlplain.py
file somewhere or install it
with setup.py
.
For a user local installation (installs to $HOME/.local
) do:
./setup.py install --user
For a system level installation do:
./setup.py build
sudo ./setup.py install
Unitary tests
This module is delivered as part of a source tree with tests, in order to run tests, do for instance:
make -j16 check
Documentation
The documentation is generated with sphinx
as is:
make doc
Install sphinx with:
pip install sphinx
Or on deb systems:
sudo apt-get install python-sphinx
The online documentation is hosted at: https://guillon.github.io/xmlplain
License
This is free and unencumbered software released into the public domain.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file xmlplain-1.1.0.tar.gz
.
File metadata
- Download URL: xmlplain-1.1.0.tar.gz
- Upload date:
- Size: 85.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21101ae61e28d33110874aecf72a127b5430c8cb3a4ffbb039ce58ac4e6a2de5 |
|
MD5 | 004040c622f575d75c6a4fec103f3ecb |
|
BLAKE2b-256 | c55fc460aea3899fcf1ebbe0bf4bc34b9707f88350ff2858129eee6316a1aadd |
File details
Details for the file xmlplain-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: xmlplain-1.1.0-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a07a1aac2c5afbb018751d02c58c1901b92aa4daab0c4a5342bf562642077c23 |
|
MD5 | 9596048b0fca2373e51081fa4ca863a8 |
|
BLAKE2b-256 | a830fb0fb9003c082271a3309a1994233c7ce1ffa1d836984564cef3ff7fcbbd |
File details
Details for the file xmlplain-1.1.0-py2-none-any.whl
.
File metadata
- Download URL: xmlplain-1.1.0-py2-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bdc04235e11124489adb2facc260f448aab6aa106b10bdd478cf4d7c58d0a939 |
|
MD5 | 3a0e7f1ea79e4194379bdf2dd6ac58cf |
|
BLAKE2b-256 | 40339b1af880c95f3aa2c1b46a17f8a0149fbdf83fa0521aba6ff6f6183e9872 |