Untitled
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...