End-to-end-Beispiel mit PyXB. Aus einem XSD-schema zu einem XML-Dokument
Ich habe eine harte Zeit, erste Schritte mit PyXB.
Sagen, ich habe eine XSD-Datei (ein XML schema). Ich möchte:
- Verwenden PyXB zu definieren Python-Objekte nach dem schema.
- Speichern Sie diese Objekte auf der Festplatte als XML-Dateien erfüllen die schema.
Wie kann ich das mit PyXB? Unten ist eine einfaches Beispiel einer XSD-Datei (aus Wikipedia) kodiert, dass eine Adresse, aber ich habe eine harte Zeit, selbst erste Schritte.
<?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
Sobald ich laufen
pyxbgen -u example.xsd -m example
Bekomme ich eine example.py
hat die folgenden Klassen:
example.Address example.STD_ANON
example.CTD_ANON example.StringIO
example.CreateFromDOM example.pyxb
example.CreateFromDocument example.sys
example.Namespace
Ich glaube, ich verstehe, was CreateFromDocument
tut es vermutlich liest eine XML aus und erstellt das entsprechende python Objekt-, aber welche Klasse verwende ich ein neues Objekt zu erstellen und dann speichern Sie es in einem XML -?
Ich bin mit ihm zu kämpfen zu, die Dokumentation ist absoluter Mist. Ein riesiges Diagramm und vollständige Erklärung von dem, was namespaces sind nicht hilfreich ist, wenn Sie nur wollen, um den Zugriff auf ein element und es gibt kein Beispiel, das Ihnen sagt, wie es zu tun mit namespaces.
InformationsquelleAutor Amelio Vazquez-Reina | 2013-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine einfache google-Suche bringt das: http://pyxb.sourceforge.net/userref_pyxbgen.html#pyxbgen
Insbesondere der Teil, der sagt:
BEARBEITEN Folgenden update:
Nun, da Sie Ihre erzeugte
Address
Klasse und alle beteiligten Helfer, Blick auf http://pyxb.sourceforge.net/userref_usebind.html, um zu lernen, wie Sie zu benutzen sind. Für Ihre spezielle Frage, die Sie studieren möchten, das "Erstellen von Instanzen in Python-Code" Absatz. Im Grunde um XML zu generieren, von Ihrer Anwendung aus Daten, die Sie einfach tun:Nun ist es an Ihnen, seien Sie neugierig und Lesen Sie den code, der generiert wird, pyxb doc, rufen Sie die verschiedenen Methoden generiert und Experimentieren!
Ich aktualisiert die OP.
Danke! Das ist großartig. Ich bemerkte, dass
Address()
gibt ein Objekt zurück, wobei jedes Attribut ist vom TypNoneType
, und es verlangt von mir, jedes Feld ausfüllen oder sonst bekomme ich die AusnahmeIncompleteElementContentError
. Ich denke, dass, wenn ich will, dass es um ein Objekt zu erstellen mit ein paar Standard-Werte, die ich brauchen würde, schreiben einen wrapperAddress()
. Ist mein Verständnis richtig, oder gibt es eine Möglichkeit, das automatische Klasse einen Konstruktor mit default-Werten?Lesen Sie den link, den ich metioned in meinem update: Alternativ können Sie den Inhalt als Parameter bei der Objekterzeugung Aufruf
Nochmals vielen Dank! Ich war in der Lage, Objekte zu erstellen, von einfachen XSD-schemas, aber ich habe Probleme sobald ich vorstellen verschachtelten Elementen. Erstellt habe ich in einem anderen thread in diesem link: stackoverflow.com/questions/17584287/.... Nicht sicher, warum Sie nicht funktionieren.
InformationsquelleAutor rectummelancolique