Attributes#

Primitive types#

Field of a primitive type marked as pydantic_xml.attr() is bound to a local element attribute. Parameter name is used to declare the attribute name from which the data is extracted. If it is omitted field name is used (respecting pydantic field aliases).

Model
class Company(BaseXmlModel):
    trade_name: str = attr(name='trade-name')
    type: str = attr()
Document
<Company trade-name="SpaceX" type="Private"/>
{
    "trade_name": "SpaceX",
    "type": "Private"
}

Namespaces#

Namespace can be defined for attributes. To bind a model field to a namespaced attribute pass parameter ns to a pydantic_xml.attr() and define namespace map for the model.

Model
class Company(
    BaseXmlModel,
    nsmap={'co': 'http://company.org/co'},
):
    trade_name: str = attr(name='trade-name', ns='co')
    type: str = attr(ns='co')
Document
<Company co:trade-name="SpaceX"
         co:type="Private"
         xmlns:co="http://company.org/co"/>
{
    "trade_name": "SpaceX",
    "type": "Private"
}

Namespace inheritance#

Attribute namespace can be inherited from the model. To make attributes inherit the model namespace define model-level namespace and namespace map and set parameter ns_attrs.

Model
class Company(
    BaseXmlModel,
    ns_attrs=True,
    ns='co',
    nsmap={'co': 'http://company.org/co'},
):
    trade_name: str = attr(name='trade-name')
    type: str = attr()
Document
<co:Company co:trade-name="SpaceX"
            co:type="Private"
            xmlns:co="http://company.org/co"/>
{
    "trade_name": "SpaceX",
    "type": "Private"
}