Пытаюсь распарсить xml следующего вида (лишние элементы выкинул чтобы получить минимально воспроизводимый кусок кода):
xml_text = '''<Periods>
<Year>01.01.2023 0:00:00</Year>
<Date_from>18.02.2023 0:00:00</Date_from>
<Year>01.01.2023 0:00:00</Year>
<Date_from>30.05.2023 0:00:00</Date_from>
<Year>01.01.2023 0:00:00</Year>
<Date_from>06.04.2023 0:00:00</Date_from>
<Year>01.01.2023 0:00:00</Year>
<Date_from>28.02.2023 0:00:00</Date_from>
<Year>01.01.2023 0:00:00</Year>
<Date_from>19.06.2023 0:00:00</Date_from>
<Year>01.01.2023 0:00:00</Year>
<Date_from>07.06.2023 0:00:00</Date_from>
</Periods>'''
с помощью кода:
import pprint
from typing import List
from pydantic_xml import BaseXmlModel, element
from pydantic_xml.element.element import SearchMode
class Periods(BaseXmlModel, tag='Periods', search_mode=SearchMode.UNORDERED):
year: List[str] = element(tag='Year', default_factory=list)
date_from: List[str] = element(tag='Date_from', default_factory=list)
data = Periods.from_xml(xml_text)
pprint.pprint(data.date_from)
При этом если выбран
search_mode=SearchMode.UNORDERED, то результат такой:
['30.05.2023 0:00:00',
'28.02.2023 0:00:00',
'18.02.2023 0:00:00',
'19.06.2023 0:00:00',
'06.04.2023 0:00:00',
'07.06.2023 0:00:00']
Как видно - порядок дат неверен.
Хорошо - задаем
search_mode=SearchMode.ORDERED:
['07.06.2023 0:00:00']
не все даты выводятся.
Такая же история с
search_mode=SearchMode.STRICT:
['18.02.2023 0:00:00']
Как таки распарсить все элементы в правильном порядке следования?