Untitled
unknown
python
3 years ago
16 kB
8
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...