Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

An XML Schema validator and decoder

Project Description

This is an implementation of XML Schema for Python (supports versions 2.7 and Python 3.3+).

This library arises from the needs of a solid Python layer for processing XML Schema based files for MaX (Materials design at the Exascale) European project. A significant problem is the encoding and the decoding of the XML data files produced by different simulation software. Another important requirement is the XML data validation, in order to put the produced data under control. The lack of a suitable alternative for Python in the schema-based decoding of XML data has led to build this library. Obviously this library can be useful for other cases related to XML Schema based processing, not only for the original scope.


The xmlschema library includes the following features:

  • Building of XML schema objects from XSD files
  • Validation of XML instances with XSD schemas
  • Decoding of XML data into Python data structures
  • An XPath based API for finding schema’s elements and attributes
  • Support of XSD validation modes


You can install the library with pip in a Python 2.7 or Python 3.3+ environment:

pip install xmlschema

The library uses the Python’s ElementTree XML library and doesn’t require additional packages. The library includes also the schemas of the XML Schema standards for working offline and to speed-up the building of schema instances.


Import the library and then create a schema instance using the path of the file containing the schema as argument:

>>> import xmlschema
>>> my_schema = xmlschema.XMLSchema('xmlschema/tests/examples/vehicles/vehicles.xsd')

The schema can be used to validate XML documents:

>>> my_schema.is_valid('xmlschema/tests/examples/vehicles/vehicles.xml')
>>> my_schema.is_valid('xmlschema/tests/examples/vehicles/vehicles-1_error.xml')
>>> my_schema.validate('xmlschema/tests/examples/vehicles/vehicles-1_error.xml')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/brunato/Development/projects/xmlschema/xmlschema/", line 220, in validate
    raise error
xmlschema.exceptions.XMLSchemaValidationError: failed validating <Element ...

Reason: character data between child elements not allowed!


  <xs:sequence xmlns:xs="">
        <xs:element maxOccurs="unbounded" minOccurs="0" name="car" type="vh:vehicleType" />


  <ns0:cars xmlns:ns0="">
    <ns0:car make="Porsche" model="911" />
    <ns0:car make="Porsche" model="911" />

Using a schema you can also decode the XML documents to nested dictionaries, with values that match to the data types declared by the schema:

>>> import xmlschema
>>> from pprint import pprint
>>> xs = xmlschema.XMLSchema('xmlschema/tests/examples/collection/collection.xsd')
>>> pprint(xs.to_dict('xmlschema/tests/examples/collection/collection.xml'))
{u'@xsi:schemaLocation': ' collection.xsd',
 'object': [{'@available': True,
             '@id': u'b0836217462',
             'author': {'@id': u'PAR',
                        'born': u'1841-02-25',
                        'dead': u'1919-12-03',
                        'name': u'Pierre-Auguste Renoir',
                        'qualification': u'painter'},
             'estimation': Decimal('10000.00'),
             'position': 1,
             'title': u'The Umbrellas',
             'year': u'1886'},
            {'@available': True,
             '@id': u'b0836217463',
             'author': {'@id': u'JM',
                        'born': u'1893-04-20',
                        'dead': u'1983-12-25',
                        'name': u'Joan Mir\xf3',
                        'qualification': u'painter, sculptor and ceramicist'},
             'position': 2,
             'title': None,
             'year': u'1925'}]}


This software is distributed under the terms of the MIT License. See the file ‘LICENSE’ in the root directory of the present distribution, or


  • Full XSD 1.0 support (almost done)
  • Validated XML data encoding
  • XSD 1.1
Release History

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
xmlschema-0.9.15-py2.py3-none-any.whl (261.9 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Dec 15, 2017
xmlschema-0.9.15.tar.gz (127.0 kB) Copy SHA256 Checksum SHA256 Source Dec 15, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting