PyXB: Python XML Schema Bindings

PyXB (“pixbee”) is a pure Python package that generates Python source code for classes that correspond to data structures defined by XMLSchema. The generated classes support bi-directional conversion between XML documents and Python objects. In concept it is similar to JAXB for Java and CodeSynthesis XSD for C++. A Thirty Second Example is at the bottom of this page. Step-by-step examples are in User Reference.

Getting Help

PyXB is distributed on SourceForge and PyPI, but active development has moved to Github. Inter-release updates will be available on github on the next branch of the PyXB repository.

For support, consult the Help Forum, or subscribe to and email the mailing list.

To file a bug report or see the status of defects reported against the current release, visit the Github issues page. (Older defects were archived under Trac at SourceForge; the historical data was moved to the SF ticket interface when SourceForge stopped supporting hosted applications. Do not attempt to open new issues on SourceForge.)

For a history of releases, see Release History.

Thirty Second Example

An example of a program using PyXB to interact with a web service [*] using an automatically-generated module. First, retrieve the WSDL and generate the bindings:

llc[566]$ pyxbgen \
      --wsdl-location= \
      --module=weather \
Retrieving WSDL from
WARNING:pyxb.binding.basis:Unable to convert DOM node {}schema at Weather.asmx?WSDL[4:4] to binding
PS urn:uuid:8292a36c-577f-11e4-b592-c8600024e903
WARNING:pyxb.binding.generate:Complex type {}ArrayOfWeatherDescription renamed to ArrayOfWeatherDescription_
WARNING:pyxb.binding.generate:Complex type {}ForecastReturn renamed to ForecastReturn_
WARNING:pyxb.binding.generate:Complex type {}WeatherReturn renamed to WeatherReturn_
Python for requires 1 modules

Then write a program that uses them:

from __future__ import print_function
import time
from pyxb.utils.six.moves.urllib import request as urllib_request
import weather   # Bindings generated by PyXB
import pyxb.utils.domutils as domutils

uri = ''
xml = urllib_request.urlopen(uri).read()
doc = domutils.StringToDOM(xml)
fc_return = weather.CreateFromDOM(doc.documentElement)
if fc_return.Success:
    print('Weather forecast for %s, %s:' % (fc_return.City, fc_return.State))
    for fc in fc_return.ForecastResult.Forecast:
        when = time.strftime('%A, %B %d %Y', fc.Date.timetuple())
        outlook = fc.Desciption # typos in WSDL left unchanged
        low = fc.Temperatures.MorningLow
        high = fc.Temperatures.DaytimeHigh
        print('  %s: %s, from %s to %s' % (when, outlook, low, high))

And run it:

llc[567]$ python
Weather forecast for Saint Paul, MN:
 Wednesday, August 13 2014: Partly Cloudy, from 63 to 83
 Thursday, August 14 2014: Partly Cloudy, from 61 to 82
 Friday, August 15 2014: Partly Cloudy, from 65 to 86
 Saturday, August 16 2014: Partly Cloudy, from 67 to 84
 Sunday, August 17 2014: Partly Cloudy, from 67 to 82
 Monday, August 18 2014: Partly Cloudy, from 67 to 83
 Tuesday, August 19 2014: Partly Cloudy, from 65 to 84

That’s it.

[*]Note: Sometime between 2014 and 2017 the CDYNE Weather Service disappeared, although as of 2017-05-13 the link to its description above was still present. If you care about weather, there is a more complex example interfacing with the National Digital Forecast Database in the examples/ndfd directory.

Indices and tables