Сквозной пример с PyXB. От схемы XSD к документу XML

Я с трудом начинаю работать с PyXB.

Скажем, у меня есть XSD-файл (схема XML). Я бы хотел:

  1. Используйте PyXB для определения объектов Python в соответствии со схемой.
  2. Сохраните эти объекты на диск как файлы 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>

Обновить

Однажды я бегу

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

В частности, часть, которая говорит:

Переведите это на Python с помощью следующей команды:

pyxbgen -u po1.xsd -m po1

Параметр -u идентифицирует документ схемы, описывающий содержимое пространства имен. Параметр может быть путем к файлу в локальной системе или 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, вызвать различные сгенерированные методы и поэкспериментировать!

Другие вопросы по тегам