pydantic-xml is a pydantic extension providing model fields xml binding
and xml serialization / deserialization.
It is closely integrated with pydantic which means it supports most of its features.
- pydantic v1 / v2 support
- flexible attributes, elements and text binding
- python collection types support (Dict,TypedDict,List,Set,Tuple, ...)
- Uniontype support
- pydantic generic models support
- pydantic computed fields support
- lxml xml parser support
- xml.etree.ElementTreestandard library xml parser support
The following model fields binding:
class Product(BaseXmlModel):
    status: Literal['running', 'development'] = attr()  # extracted from the 'status' attribute
    launched: Optional[int] = attr(default=None)  # extracted from the 'launched' attribute
    title: str  # extracted from the element text
class Company(BaseXmlModel):
    trade_name: str = attr(name='trade-name')  # extracted from the 'trade-name' attribute
    website: HttpUrl = element()  # extracted from the 'website' element text
    products: List[Product] = element(tag='product', default=[])  # extracted from the 'Company' element's childrendefines the XML document:
<Company trade-name="SpaceX">
    <website>https://www.spacex.com</website>
    <product status="running" launched="2013">Several launch vehicles</product>
    <product status="running" launched="2019">Starlink</product>
    <product status="development">Starship</product>
</Company>See documentation for more details.