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.
Note
This page is for the 1.2.0 release of PyXB, which should be considered beta software. For documentation on the recommended stable release please see the PyXB 1.1.5 release notes.
PyXB is distributed on SourceForge.
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 Trac database.
For a history of releases, see Release History.
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[1394]$ pyxbgen \
--wsdl-location=http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL \
--module=weather \
--write-for-customization
urn:uuid:c9f96a32-b700-11e1-b837-c8600024e903
Retrieving WSDL from http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL
Importing pyxb.binding.datatypes to get binding for wildcard {http://www.w3.org/2001/XMLSchema}schema
NOTE: Created unbound wildcard element from value in schema
PS urn:uuid:c9f96a32-b700-11e1-b837-c8600024e903
Complex type {http://ws.cdyne.com/WeatherWS/}WeatherReturn renamed to WeatherReturn_
Complex type {http://ws.cdyne.com/WeatherWS/}ArrayOfWeatherDescription renamed to ArrayOfWeatherDescription_
Complex type {http://ws.cdyne.com/WeatherWS/}ForecastReturn renamed to ForecastReturn_
Python for http://ws.cdyne.com/WeatherWS/ requires 1 modules
Saved binding source to ./raw/weather.py
Then write a program that uses them:
import time
import urllib2
import weather # Bindings generated by PyXB
import pyxb.utils.domutils as domutils
uri = 'http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityForecastByZIP?ZIP=55113'
xml = urllib2.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[1395]$ python client_get.py
Weather forecast for Saint Paul, MN:
Friday, June 15 2012: Partly Cloudy, from to 85
Saturday, June 16 2012: Thunder Storms, from 67 to 81
Sunday, June 17 2012: Sunny, from 62 to 84
Monday, June 18 2012: Partly Cloudy, from 69 to 86
Tuesday, June 19 2012: Thunder Storms, from 68 to 81
Wednesday, June 20 2012: Thunder Storms, from 68 to 83
Thursday, June 21 2012: Partly Cloudy, from 62 to 73
That’s it.