# 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

- Overview
  - What Is PyXB?
  - How to use it
  - Examples of Supported Schema
  - Limitations
  - License and Disclaimers
  - PyXB Vision
  - Related Packages
- Examples
  - Dictionary (Aonaware)
  - Simple Weather (CDyne)
  - Professional Weather (National Digital Forecast Data)
  - Television Schedules (Tribune Media Services)
  - Address-To-Latitude/Longitude (http://geocoder.us)
  - OpenGIS (http://www.opengeospatial.org)
- Release History
  - 1.2.x
  - 1.1.x
  - 1.0.x (Stable)
  - 0.7.x (Beta)
  - 0.5.x (Beta)
  - 0.4.x (Stable)
  - 0.2.x (Stable)
- Architecture
  - Namespaces
  - Component Model
  - Binding Model
  - Content Model
- User Reference
  - Generating Binding Classes
  - Using Binding Classes
  - Debugging Validation Errors
  - `pyxbgen` Command Line Options
- pyxb package
  - subpackages
  - Submodules
  - pyxb.exceptions_ module
  - Module contents
- Maintainer Reference
  - Git Repository
  - Coding Practices

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

## Indices and tables

- Index
- Search Page