Я пытаюсь проанализировать пользовательские форматы XML файлов с помощью PyXB. Итак, я сначала написал следующую 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
I затем написал следующий скрипт для разбора файла 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())
Я использую этот скрипт для определения законности примера. Синтаксис xml. Например, в следующем примере. 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 файл схемы?