End-to-end example with PyXB. From an XSD schema to an XML document

99封情书 提交于 2019-12-03 05:08:50

问题


I am having a hard time getting started with PyXB.

Say I have an XSD file (an XML schema). I would like to:

  1. Use PyXB to define Python objects according to the schema.
  2. Save those objects to disk as XML files that satisfy the schema.

How can I do this with PyXB? Below is a simple example of an XSD file (from Wikipedia) that encodes an address, but I am having a hard time even getting started.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Address">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="FullName" type="xs:string" />
        <xs:element name="House" type="xs:string" />
        <xs:element name="Street" type="xs:string" />
        <xs:element name="Town" type="xs:string" />
        <xs:element name="County" type="xs:string" minOccurs="0" />
        <xs:element name="PostCode" type="xs:string" />
        <xs:element name="Country" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="IN" />
              <xs:enumeration value="DE" />
              <xs:enumeration value="ES" />
              <xs:enumeration value="UK" />
              <xs:enumeration value="US" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Update

Once I run

pyxbgen -u example.xsd -m example

I get a example.py that has the following classes:

example.Address             example.STD_ANON
example.CTD_ANON            example.StringIO
example.CreateFromDOM       example.pyxb
example.CreateFromDocument  example.sys
example.Namespace           

I think I understand what CreateFromDocument does - it presumably reads an XML and creates the corresponding python object-, but which class do I use to create a new object and then save it to an XML?


回答1:


A simple google search brings this: http://pyxb.sourceforge.net/userref_pyxbgen.html#pyxbgen

In particular the part that says:

Translate this into Python with the following command:

pyxbgen -u po1.xsd -m po1

The -u parameter identifies a schema document describing contents of a namespace. The parameter may be a path to a file on the local system, or a URL to a network-accessible location like http://www.weather.gov/forecasts/xml/DWMLgen/schema/DWML.xsd. The -m parameter specifies the name to be used by the Python module holding the bindings generated for the namespace in the preceding schema. After running this, the Python bindings will be in a file named po1.py.

EDIT Following your update:

Now that you have your generated Address class and all the associated helpers, look at http://pyxb.sourceforge.net/userref_usebind.html in order to learn how to use them. For your specific question, you want to study the "Creating Instances in Python Code" paragraph. Basically to generate XML from your application data you simply do:

import example
address = Address()
address.FullName = "Jo La Banane"
# fill other members of address
# ...
with open('myoutput.xml', 'w') as file
    f.write(address.toxml("utf-8"))

Now it's up to you to be curious and read the code being generated, pyxb's doc, call the various generated methods and experiment!



来源:https://stackoverflow.com/questions/17309125/end-to-end-example-with-pyxb-from-an-xsd-schema-to-an-xml-document

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!