Data Class: pydata

Generate Python Data Classes with type hints grouped in the same modules by the original schema.

This is the default format and also comes with parsers and serializers for both xml and json.

XSD Types mapping

str:
 xs:anySimpleType     xs:gDay       xs:IDREF    xs:normalizedString
 xs:anyURI            xs:gMonth     xs:IDREFS   xs:NOTATION
 xs:base64Binary      xs:gMonthDay  xs:language xs:QName
 xs:date              xs:gYear      xs:Name     xs:simpleDerivationSet
 xs:dateTime          xs:gYearMonth xs:NCName   xs:string
 xs:derivationControl xs:hexBinary  xs:NMTOKEN  xs:time
 xs:duration          xs:ID         xs:NMTOKENS xs:token

bool:
    xs:boolean

int:
 xs:byte               xs:ENTITIES        xs:ENTITY          xs:int
 xs:integer            xs:long            xs:negativeInteger xs:nonNegativeInteger
 xs:nonPositiveInteger xs:positiveInteger xs:short           xs:unsignedByte
 xs:unsignedInt        xs:unsignedLong    xs:unsignedShort


float:
    xs:decimal         xs:double          xs:float

XmlSerializer

xsdata.formats.dataclass.serializers.XmlSerializer

>>> import pprint
>>> from docs.examples.primer import PurchaseOrder, Items, Usaddress
>>> from xsdata.formats.dataclass.serializers import XmlSerializer

>>> item = Items.Item(product_name="duct tape", quantity=99, usprice=19.99)
>>> items = Items()
>>> items.item.append(item)
>>>
>>> address = Usaddress(name="Chris", street="Sesame", city="New York", state="New York", zip="123", country="US")
>>> order = PurchaseOrder(ship_to=address, bill_to=address, items=items)

>>> serializer = XmlSerializer(pretty_print=True)
>>> pprint.pprint(serializer.render(order))
("<?xml version='1.0' encoding='UTF-8'?>\n"
 '<purchaseOrder>\n'
 '  <shipTo country="US">\n'
 '    <name>Chris</name>\n'
 '    <street>Sesame</street>\n'
 '    <city>New York</city>\n'
 '    <state>New York</state>\n'
 '    <zip>123</zip>\n'
 '  </shipTo>\n'
 '  <billTo country="US">\n'
 '    <name>Chris</name>\n'
 '    <street>Sesame</street>\n'
 '    <city>New York</city>\n'
 '    <state>New York</state>\n'
 '    <zip>123</zip>\n'
 '  </billTo>\n'
 '  <items>\n'
 '    <item>\n'
 '      <productName>duct tape</productName>\n'
 '      <quantity>99</quantity>\n'
 '      <USPrice>19.99</USPrice>\n'
 '    </item>\n'
 '  </items>\n'
 '</purchaseOrder>\n')
>>>

XmlParser

xsdata.formats.dataclass.parsers.XmlParser

>>> from xsdata.formats.dataclass.parsers import XmlParser

>>> parser = XmlParser()
>>> order = parser.from_path("docs/examples/primer.xml", PurchaseOrder)
>>> order.bill_to
Usaddress(name='Robert Smith', street='8 Oak Avenue', city='Old Town', state='PA', zip=95819.0, country='US')

JsonSerializer

xsdata.formats.dataclass.serializers.JsonSerializer

from xsdata.formats.dataclass.serializers import JsonSerializer

serializer = JsonSerializer(indent=2, dict_factory=DictFactory.FILTER_NONE)

JsonParser

xsdata.formats.dataclass.parsers.JsonParser

from xsdata.formats.dataclass.parsers import JsonParser

obj = parser.from_path("/some.json, PurchaseOrder)