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.

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.

Getting Help

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.

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[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.

Indices and tables

Table Of Contents

Next topic

Overview

This Page