Python PyXB 的端到端示例。从 XSD 模式到 XML 文档
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17309125/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
End-to-end example with PyXB. From an XSD schema to an XML document
提问by Amelio Vazquez-Reina
I am having a hard time getting started with PyXB.
我很难开始使用PyXB。
Say I have an XSD file(an XML schema). I would like to:
假设我有一个 XSD 文件(一个 XML 模式)。我想要:
- Use PyXB to define Python objects according to the schema.
- Save those objects to disk as XML files that satisfy the schema.
- 使用 PyXB 根据模式定义 Python 对象。
- 将这些对象作为满足架构的 XML 文件保存到磁盘。
How can I do this with PyXB? Below is a simple exampleof an XSD file (from Wikipedia) that encodes an address, but I am having a hard time even getting started.
我怎样才能用 PyXB 做到这一点?下面是一个对地址进行编码的 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>
Update
更新
Once I run
一旦我跑
pyxbgen -u example.xsd -m example
I get a example.py
that has the following classes:
我得到一个example.py
具有以下类的:
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?
我想我明白是什么CreateFromDocument
- 它大概是读取一个 XML 并创建相应的 python 对象 - 但是我使用哪个类来创建一个新对象然后将它保存到一个 XML 中?
采纳答案by rectummelancolique
A simple google search brings this: http://pyxb.sourceforge.net/userref_pyxbgen.html#pyxbgen
一个简单的谷歌搜索带来了这个:http: //pyxb.sourceforge.net/userref_pyxbgen.html#pyxbgen
In particular the part that says:
特别是那部分说:
Translate this into Python with the following command:
使用以下命令将其转换为 Python:
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.
-u 参数标识描述命名空间内容的模式文档。该参数可以是本地系统上文件的路径,也可以是网络可访问位置的 URL,例如 http://www.weather.gov/forecasts/xml/DWMLgen/schema/DWML.xsd。-m 参数指定 Python 模块使用的名称,该模块保存为前面模式中的命名空间生成的绑定。运行后,Python 绑定将位于名为 po1.py 的文件中。
EDITFollowing your update:
编辑更新后:
Now that you have your generated Address
class and all the associated helpers, look at http://pyxb.sourceforge.net/userref_usebind.htmlin 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:
现在您有了生成的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"))
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!
现在由你来好奇并阅读正在生成的代码,pyxb 的文档,调用各种生成的方法并进行实验!