Untitled

 avatar
unknown
python
2 years ago
16 kB
3
Indexable
import xml.etree.ElementTree as ET

import docx

xml_text = '''<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="ShepGetInfoDriverLicenceRequest">
        <xsd:annotation>
            <xsd:documentation>
                Пример запроса по информации об водителе
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element minOccurs="0" name="DlSeriesAndNumber" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        Серия ВУ и Номер ВУ
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element minOccurs="0" name="Iin" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        ИИН
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ShepGetInfoDriverLicenceResponse">
        <xsd:sequence>
            <xsd:element name="Success" type="xsd:boolean">
                <xsd:annotation>
                    <xsd:documentation>
                        Флаг успешности запроса
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element name="Error" type="xsd:string" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        Текст ошибки
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element name="ErrorCode" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        Код ошибки
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element minOccurs="0" name="Signature" type="ds:SignatureType">
                <xsd:annotation>
                    <xsd:documentation>
                        Подпись клиента
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>

            <xsd:element name="ItemCount" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        Количество ответов
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Items" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        Массив ответов
                    </xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element maxOccurs="unbounded" minOccurs="0" name="Item" type="Item">
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Item">
        <xsd:sequence>
            <xsd:element name="DlSeries" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        Серия ВУ
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="DlNumber" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        Номер ВУ
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="OperationDateAcceptOrIssueDl" type="xsd:dateTime">
                <xsd:annotation>
                    <xsd:documentation>
                        Дата операции (утверждения или выдачи ВУ)
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="DlExpirationDate" type="xsd:dateTime">
                <xsd:annotation>
                    <xsd:documentation>
                        Дата окончания действия ВУ
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Category" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        Категории водительских прав
                    </xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="IsACategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория A
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsA1Category" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория A1
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsBCategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория B
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsB1Category" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория B1
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsBECategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория BE
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsCCategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория C
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsC1Category" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория C1
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsCECategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория CE
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsC1ECategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория C1E
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsDCategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория D
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsD1Category" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория D1
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsD1ECategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория D1E
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsDECategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория DE
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsECategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория E
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="IsFCategory" type="xsd:boolean">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Категория F
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="DlCategory" type="xsd:string" minOccurs="0">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Все категории
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="Person">
                <xsd:complexType>
                    <xsd:sequence>
<!--                        <xsd:element minOccurs="0" name="BirthPlaceCode" type="xsd:string">-->
<!--                            <xsd:annotation>-->
<!--                                <xsd:documentation>-->
<!--                                    KATO Место рождения (код из справочника)-->
<!--                                </xsd:documentation>-->
<!--                            </xsd:annotation>-->
<!--                        </xsd:element>-->
                        <xsd:element name="LastName" type="xsd:string">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Фамилия
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="FirstName" type="xsd:string">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Имя
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="MiddleName" type="xsd:string">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Отчество
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="DateBirth" type="xsd:dateTime">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Дата рождения
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="Iin" type="xsd:string">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Иин
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="BloodGroup" type="xsd:string">
                            <xsd:annotation>
                                <xsd:documentation>
                                    Группа крови
                                </xsd:documentation>
                            </xsd:annotation>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="Signature" type="xsd:string" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>
                        Подпись владельца ВУ
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="SpecialMark" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>
                        Особые отметки
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>'''

root = ET.fromstring(xml_text)

doc = docx.Document()
table = doc.add_table(rows=1, cols=3)
header_cells = table.rows[0].cells
header_cells[0].text = "Поле"
header_cells[1].text = "Тип"
header_cells[2].text = "Документация"

result = {}
for elem in root.findall('.//{http://www.w3.org/2001/XMLSchema}element'):
    name = elem.get('name')
    type = elem.get('type')
    if type is not None:
        type = type.replace("xsd:", "")
    if elem.find('.//{http://www.w3.org/2001/XMLSchema}documentation') is None:
        continue
    documentation = elem.find('.//{http://www.w3.org/2001/XMLSchema}documentation').text.strip()
    result[name] = (type, documentation)

for name, (type, documentation) in result.items():
    row_cells = table.add_row().cells
    if name is None:
        name = ""
    if type is None:
        type = ""
    if documentation is None:
        documentation = ""
    row_cells[0].text = name
    row_cells[1].text = type
    row_cells[2].text = documentation

doc.save("xsd_data.docx")
Editor is loading...