Пример конца с PyXB. От схемы XSD до XML-документа
Мне сложно начать работу с PyXB.
Скажем, что у меня XSD файл (XML-схема). Я бы хотел:
- Используйте PyXB для определения объектов Python в соответствии со схемой.
- Сохраните эти объекты на диске в виде файлов XML, которые удовлетворяют схеме.
Как это сделать с 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
Как только я запустил
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
Простой поиск Google приносит следующее: http://pyxb.sourceforge.net/userref_pyxbgen.html#pyxbgen
В частности, часть, которая гласит:
Перевести на Python с помощью следующей команды:
pyxbgen -u po1.xsd -m po1
Параметр -u идентифицирует схему документ, описывающий содержимое пространства имен. Параметр может быть путь к файлу в локальной системе или URL-адрес доступной сети расположение http://www.weather.gov/forecasts/xml/DWMLgen/schema/DWML.xsd. -m Параметр указывает имя, которое будет использоваться модулем Python привязки, сгенерированные для пространства имен в предыдущей схеме. После этого, привязки Python будут находиться в файле с именем po1.py.
EDIT После обновления:
Теперь, когда у вас есть сгенерированный класс 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, вызвать различные сгенерированные методы и поэкспериментировать!