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.
Contents¶
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=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:8292a36c-577f-11e4-b592-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:
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 = 'http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityForecastByZIP?ZIP=55113'
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 client_get.py
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. |