PyXB的端到端示例。从XSD架构到XML文档

时间:2013-06-25 23:18:45

标签: python xml xsd pyxb

我很难开始使用PyXB

假设我有an XSD file(XML架构)。我想:

  1. 使用PyXB根据架构定义Python对象。
  2. 将这些对象保存为磁盘,作为满足架构的XML文件。
  3. 如何使用PyXB执行此操作?下面是一个simple example的XSD文件(来自维基百科),它编码一个地址,但我很难开始。

    <?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>
    

    更新

    一旦我跑了

    pyxbgen -u example.xsd -m example
    

    我得到一个example.py,其中包含以下类:

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

    我想我理解CreateFromDocument的作用 - 它可能是读取XML并创建相应的python对象 - 但是我使用哪个类来创建新对象然后将其保存到XML < /强>

1 个答案:

答案 0 :(得分:14)

一个简单的谷歌搜索带来了这个:http://pyxb.sourceforge.net/userref_pyxbgen.html#pyxbgen

特别是那部分说:

  

使用以下命令将其转换为Python:

pyxbgen -u po1.xsd -m po1
  

-u参数标识架构   描述命名空间内容的文档。参数可以是a   本地系统上文件的路径,或者可访问网络的URL   位置就好   http://www.weather.gov/forecasts/xml/DWMLgen/schema/DWML.xsd。 -m   参数指定Python模块持有的名称   在前一个模式中为名称空间生成的绑定。   运行此命令后,Python绑定将位于一个名为的文件中   po1.py。

编辑更新后:

现在您已经生成了Address类和所有关联的帮助程序,请查看http://pyxb.sourceforge.net/userref_usebind.html以了解如何使用它们。对于您的特定问题,您希望学习“在Python代码中创建实例”段落。基本上,只需从您的应用程序数据生成XML:

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"))

现在由你好奇并阅读生成的代码,pyxb的doc,调用各种生成的方法和实验!