我正在尝试使用 PyXB 解析自定义 XML 文件格式。因此,我首先编写了以下 XML 模式:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="outertag" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="innertag0"
minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="innertag1"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
我使用以下 pyxbgen 命令生成 Python 模块的源代码 py_schema_module.py:
pyxbgen -m py_schema_module -u schema.xsd
然后,我编写了以下脚本来解析我称为 example.xml 的 XML 文件:
#!/usr/bin/env python2.7
import py_schema_module
if __name__ == "__main__":
with open("example.xml", "r") as f:
py_schema_module.CreateFromDocument(f.read())
我使用该脚本来确定 example.xml 语法的合法性。例如,以下 example.xml 文件具有每个架构的合法语法:
<outertag>
<innertag0></innertag0>
<innertag1></innertag1>
</outertag>
这样做也是如此:
<outertag>
<innertag1></innertag1>
<innertag0></innertag0>
</outertag>
但是,以下语法是非法的:
<outertag>
<innertag1></innertag1>
<innertag0></innertag0>
<innertag1></innertag1>
</outertag>
这是这样的:
<outertag>
<innertag0></innertag0>
<innertag1></innertag1>
<innertag0></innertag0>
</outertag>
我可以写innertag0,然后写innertag1。我也可以写innertag1,然后写innertag0。我也可以任意重复innertag0 和innertag1 的实例(为简洁起见未显示示例)。但是,我不能做的是在 innertag0 和 innertag1 之间切换。
假设我希望格式支持此功能。我应该如何更改我的 XML 模式文件?