pydantic-xml icon indicating copy to clipboard operation
pydantic-xml copied to clipboard

Error parsing when fields unordered

Open KristinaErdman opened this issue 6 months ago • 1 comments

Code:

from typing import Optional
from pydantic_xml import element, BaseXmlModel
from lxml.etree import XML, Element


class Contact(BaseXmlModel, tag="Contact"):
    Id: Optional[str] = element(default=None, max_length=15)
    IsActive: bool = element()


contact_data_1 = """<Contact>
                <Id>12786799082</Id>
                <IsActive>true</IsActive>
            </Contact>"""

contact_data_2 = """<Contact>
                <IsActive>true</IsActive>
                <Id>12786799082</Id>
            </Contact>"""

for raw_xml in (contact_data_1, contact_data_2):
    contact_element: Element = XML(raw_xml)
    contact = Contact.from_xml_tree(contact_element)

    print(contact)

Output:

Id='12786799082' IsActive=True
Id=None IsActive=True

I'm use pydantic-xml[lxml]

KristinaErdman avatar Jul 16 '25 06:07 KristinaErdman

This might be useful for you. https://pydantic-xml.readthedocs.io/en/latest/pages/data-binding/elements.html#unordered

All you need to do is add search_mode='unordered' to your class.

jwfraustro avatar Jul 16 '25 15:07 jwfraustro