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.
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[766]$ pyxbgen \
--wsdl-location=http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL \
--module=weather \
--write-for-customization
Retrieving WSDL from http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL
WARNING:pyxb.binding.basis:Unable to convert DOM node {http://www.w3.org/2001/XMLSchema}schema at Weather.asmx?WSDL[4:4] to binding
PS urn:uuid:ea640f34-4869-11e2-924d-c8600024e903
WARNING:pyxb.binding.generate:Complex type {http://ws.cdyne.com/WeatherWS/}ArrayOfWeatherDescription renamed to ArrayOfWeatherDescription_
WARNING:pyxb.binding.generate:Complex type {http://ws.cdyne.com/WeatherWS/}ForecastReturn renamed to ForecastReturn_
WARNING:pyxb.binding.generate:Complex type {http://ws.cdyne.com/WeatherWS/}WeatherReturn renamed to WeatherReturn_
Python for http://ws.cdyne.com/WeatherWS/ requires 1 modules
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[767]$ python client_get.py
Weather forecast for Saint Paul, MN:
Monday, December 17 2012: Partly Cloudy, from 15 to 26
Tuesday, December 18 2012: , from 19 to 32
Wednesday, December 19 2012: Partly Cloudy, from 18 to 32
Thursday, December 20 2012: Mostly Cloudy, from 16 to 22
Friday, December 21 2012: Sunny, from 8 to 20
Saturday, December 22 2012: Partly Cloudy, from 8 to 21
Sunday, December 23 2012: Partly Cloudy, from 3 to 19
That’s it.