Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27

XML файл чека продажи по XSD схеме

03.07.2024, 15:14. Показов 1538. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поступило задание на создание XML файл чека продажи по XSD схеме. Честно сказать, я ещё не имел дела с XSD. Не прошу решить всё за меня, но хотел бы подробную инструкцию как вообще с этим работать и с чего начать. Дело в том, что время ограничено, но хочу сам разобраться тоже.
Для наглядности, высылаю полное задание:

Написать скрипт на Python, который
- формирует xml файл чека продажи, в соответствии с заданной
xsd схемой;
Все параметры xml-файла должны иметь случайные значения,
включая количество элементов Bottle (от 1 до 10). Значения INN,от 1 до 10). Значения INN,). Значения INN,
EAN брать в случайном порядке из прилагаемых к заданию
файлов.
- отправляет собранный файл утилитой cUrl на
http://localhost:80). Значения INN,80). Значения INN,/xml
Xsd-схема:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?xml version="1.0). Значения INN," encoding="utf-8"?>
<xs:schema id="Cheque" xmlns:xs="http://www.w3.org/20). Значения INN,0). Значения INN,1/XMLSchema">
<xs:simpleType name="IN">
<xs:restriction base="xs:string">
<xs:pattern value="(от 1 до 10). Значения INN,\d{10). Значения INN,}|\d{12})"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="KP">
<xs:restriction base="xs:string">
<xs:pattern value="(от 1 до 10). Значения INN,\d{9}|)"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DT">
<xs:restriction base="xs:string">
<xs:pattern value="[0). Значения INN,-3][0). Значения INN,-9][0). Значения INN,-1][0). Значения INN,-9][0). Значения INN,-9]{2}[0). Значения INN,-2][0). Значения INN,-9][0). Значения INN,-5][0). Значения INN,-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="BK">
<xs:restriction base="xs:string">
<xs:pattern value="\d\dN\w{20). Значения INN,}\d[0). Значения INN,-1]\d[0). Значения INN,-3]\d{10). Значения INN,}\w{31}"/>
</xs:restriction></xs:simpleType>
<xs:simpleType name="EAN">
<xs:restriction base="xs:string">
<xs:pattern value="(от 1 до 10). Значения INN,\d{8}|\d{13}|\d{12}|\d{14})"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PRICE">
<xs:restriction base="xs:string">
<xs:pattern value="[-]?\d+\.\d{0). Значения INN,,2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="VOLUME">
<xs:restriction base="xs:string">
<xs:pattern value="(от 1 до 10). Значения INN,\d+\.?\d{0). Значения INN,,4}|)"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ADDRESS">
<xs:restriction base="xs:string">
<xs:maxLength value="128"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Bottle">
<xs:complexType>
<!-- случайное от 10). Значения INN,0). Значения INN,.0). Значения INN,0). Значения INN, до 10). Значения INN,0). Значения INN,0). Значения INN,.0). Значения INN,0). Значения INN, -->
<xs:attribute name="price" type="PRICE" use="required"/>
<!-- случайное в соответствие с типом-->
<xs:attribute name="barcode" type="BK" use="required" />
<!-- случайное из файла -->
<xs:attribute name="ean" type="EAN" use="required" />
<!-- случайное от 0). Значения INN,.10). Значения INN,0). Значения INN,0). Значения INN, до 3.0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN, с шагом 0). Значения INN,.0). Значения INN,5-->
<xs:attribute name="volume" type="VOLUME" />
</xs:complexType></xs:element>
<xs:element name="Cheque">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element ref="Bottle" />
</xs:choice>
</xs:sequence>
<!-- случайное из файла -->
<xs:attribute name="inn" type="IN" use="required" />
<!-- случайное в соответствие с типом-->
<xs:attribute name="kpp" type="KP" />
<!-- случайный набор русских букв и 2ух пробелов, общая длина от 20). Значения INN,
до 10). Значения INN,0). Значения INN, -->
<xs:attribute name="address" type="ADDRESS" use="required" />
<!-- случайный набор русских букв длиной от 10). Значения INN, до 20). Значения INN,-->
<xs:attribute name="name" type="xs:string" use="required" />
<!-- случайный набор латинских букв и цифр длиной от 6 до 12-->
<xs:attribute name="kassa" type="xs:string" use="required" />
<!-- случайное в соответствие с типом-->
<xs:attribute name="shift" type="xs:int" use="required" />
<!-- случайное в соответствие с типом-->
<xs:attribute name="number" type="xs:int" use="required" />
<!-- случайное в соответствие с типом-->
<xs:attribute name="datetime" type="DT" use="required" />
</xs:complexType>
<xs:unique name="bottleBarcode">
<xs:selector xpath="Bottle" />
<xs:field xpath="@barcode" />
</xs:unique>
</xs:element>
</xs:schema>Пример файла:
<?xml version="1.0). Значения INN," encoding="UTF-8"?>
<Cheque inn="0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,"
kpp="0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,"
address="Test"
name="Test"
kassa="1"
shift="1"
number="1"
datetime="0). Значения INN,10). Значения INN,1150). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,">
<Bottle price="10). Значения INN,.0). Значения INN,0). Значения INN,"
barcode="22N0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN,XOPN13MM66T0). Значения INN,HVF311220). Значения INN,130). Значения INN,0). Значения INN,0). Значения INN,34765392191521755859563
0). Значения INN,271294710). Значения INN,1" ean="460). Значения INN,70). Значения INN,0). Значения INN,50). Значения INN,90). Значения INN,812" volume="1.0). Значения INN,0). Значения INN,0). Значения INN,0). Значения INN," />
</Cheque>
Пример командной строки отправки запроса утилитой cUrl:
curl –F “xml_file=@/Путь_к_файлу/Имя_файла.xml” [url]http://localhost:80[/url]). Значения INN,80). Значения INN,/xml
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2024, 15:14
Ответы с готовыми решениями:

Заполнение XML (по xsd схеме)
Добрый день! Нужна помощь от профессионалов дилетанту. Задачка следующая. Есть исходный xls файл с данными. Нужно из него извлечь...

Проверка xml на соответствие схеме xsd
Здравствуйте, Подскажите, плиз, как проверить xml на соответствие схеме xsd в XML spy Altova? Куда там зайти и что нажать?:)

Проверка валидности xml по xsd схеме
// Создаю xml-документ loOutput = CREATEOBJECT(&quot;Msxml2.DOMDocument.6.0&quot;) loXmlRoot =...

22
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.07.2024, 16:00
Вас троллят, схема невалидная.
0
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
03.07.2024, 16:02  [ТС]
А что именно не так? Может быть я что-то не так скинул?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.07.2024, 16:11
И пример xml не подходит для схемы.

Code
1
    9:22    sample.xml  cvc-pattern-valid: Value '0000000000' is not facet-valid with respect to pattern '(от 1 до 10\d{10}|\d{12})' for type 'IN'.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<Cheque inn="0000000000"
kpp="000000000"
address="Test"
name="Test"
kassa="1"
shift="1"
number="1"
datetime="0101150000">
    <Bottle price="10.00"
barcode="22N00000XOPN13MM66T0HVF3112201300034765392191521755859563
02712947101" ean="4607005090812" volume="1.0000" />
</Cheque>
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Cheque"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="IN">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d{10}|\d{12})"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="KP">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d{9}|)"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="DT">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-3][0-9][0-1][0-9][0-9]{2}[0-2][0-9][0-5][0-9]"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="BK">
        <xs:restriction base="xs:string">
            <xs:pattern value="\d\dN\w{20}\d[0-1]\d[0-3]\d{10}\w{31}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="EAN">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d{8}|\d{13}|\d{12}|\d{14})"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="PRICE">
        <xs:restriction base="xs:string">
            <xs:pattern value="[-]?\d+\.\d{0,2}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="VOLUME">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d+\.?\d{0,4}|)"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ADDRESS">
        <xs:restriction base="xs:string">
            <xs:maxLength value="128"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="Bottle">
        <xs:complexType>
            <!-- случайное от 100.00 до 1000.00 -->
            <xs:attribute name="price" type="PRICE" use="required"/>
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="barcode" type="BK" use="required" />
            <!-- случайное из файла -->
            <xs:attribute name="ean" type="EAN" use="required" />
            <!-- случайное от 0.1000 до 3.0000 с шагом 0.05-->
            <xs:attribute name="volume" type="VOLUME" />
        </xs:complexType>
    </xs:element>
    <xs:element name="Cheque">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="unbounded">
                    <xs:element ref="Bottle" />
                </xs:choice>
            </xs:sequence>
            <!-- случайное из файла -->
            <xs:attribute name="inn" type="IN" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="kpp" type="KP" />
            <!-- случайный набор русских букв и 2ух пробелов, общая длина от 20
до 100 -->
            <xs:attribute name="address" type="ADDRESS" use="required" />
            <!-- случайный набор русских букв длиной от 10 до 20-->
            <xs:attribute name="name" type="xs:string" use="required" />
            <!-- случайный набор латинских букв и цифр длиной от 6 до 12-->
            <xs:attribute name="kassa" type="xs:string" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="shift" type="xs:int" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="number" type="xs:int" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="datetime" type="DT" use="required" />
        </xs:complexType>
        <xs:unique name="bottleBarcode">
            <xs:selector xpath="Bottle" />
            <xs:field xpath="@barcode" />
        </xs:unique>
    </xs:element>
</xs:schema>
Добавлено через 50 секунд
https://www.liquid-technologie... -validator

Добавлено через 6 минут
Валидация в питоне:

Python
1
2
3
4
5
6
7
8
9
from lxml import etree
 
xsd_tree = etree.parse("test.xsd")
xml_tree = etree.parse("test.xml")
 
xmlschema = etree.XMLSchema(xsd_tree)
print("Strict:", xmlschema.validate(xml_tree))
 
xmlschema.assertValid(xml_tree)
File "src/lxml/etree.pyx", line 3692, in lxml.etree._Validator.assertValid
lxml.etree.DocumentInvalid: Element 'Cheque', attribute 'inn': [facet 'pattern'] The value '0000000000' is not accepted by the pattern '(от 1 до 10\d{10}|\d{12})'., line 9
0
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
03.07.2024, 16:15  [ТС]
А можете, пожалуйста, объяснить подробно что к чему тут, если вам не сложно? И что делать в такой ситуации, если это тестовое задание перед собеседованием? Правда, не понимаю, при чём тут позиция Тестировщика, а при чём тут создание не тестового скрипта на Python.
Хотя, может быть в этом и есть задание, протестировать этот код и выявить ошибки или типа того?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.07.2024, 16:18
Хотя схема выглядит необычно, я привык видеть их такими, впрочем, схема создаётся не для чтения человеком:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Cheque" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Cheque">
        <xs:complexType>
            <!-- случайное из файла -->
            <xs:attribute name="inn" type="IN" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="kpp" type="KP" />
            <!-- случайный набор русских букв и 2ух пробелов, общая длина от 20
до 100 -->
            <xs:attribute name="address" type="ADDRESS" use="required" />
            <!-- случайный набор русских букв длиной от 10 до 20-->
            <xs:attribute name="name" type="xs:string" use="required" />
            <!-- случайный набор латинских букв и цифр длиной от 6 до 12-->
            <xs:attribute name="kassa" type="xs:string" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="shift" type="xs:int" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="number" type="xs:int" use="required" />
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="datetime" type="DT" use="required" />
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="unbounded">
    <xs:element name="Bottle">
        <xs:complexType>
            <!-- случайное от 100.00 до 1000.00 -->
            <xs:attribute name="price" type="PRICE" use="required"/>
            <!-- случайное в соответствие с типом-->
            <xs:attribute name="barcode" type="BK" use="required" />
            <!-- случайное из файла -->
            <xs:attribute name="ean" type="EAN" use="required" />
            <!-- случайное от 0.1000 до 3.0000 с шагом 0.05-->
            <xs:attribute name="volume" type="VOLUME" />
        </xs:complexType>
    </xs:element>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
        <xs:unique name="bottleBarcode">
            <xs:selector xpath="Bottle" />
            <xs:field xpath="@barcode" />
        </xs:unique>
    </xs:element>
 
    <xs:simpleType name="IN">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d{10}|\d{12})"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="KP">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d{9}|)"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="DT">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-3][0-9][0-1][0-9][0-9]{2}[0-2][0-9][0-5][0-9]"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="BK">
        <xs:restriction base="xs:string">
            <xs:pattern value="\d\dN\w{20}\d[0-1]\d[0-3]\d{10}\w{31}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="EAN">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d{8}|\d{13}|\d{12}|\d{14})"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="PRICE">
        <xs:restriction base="xs:string">
            <xs:pattern value="[-]?\d+\.\d{0,2}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="VOLUME">
        <xs:restriction base="xs:string">
            <xs:pattern value="(от 1 до 10\d+\.?\d{0,4}|)"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ADDRESS">
        <xs:restriction base="xs:string">
            <xs:maxLength value="128"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
Добавлено через 1 минуту
Цитата Сообщение от MadaraMan Посмотреть сообщение
Хотя, может быть в этом и есть задание, протестировать этот код и выявить ошибки или типа того?
Нет, в задании же написано: сгенерировать несколько миллионов внешне валидных xml (по схеме)
0
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
03.07.2024, 16:20  [ТС]
Получается, схема, которую вы скинули и является ответом?
Мне также скинули два файла со списком INN и EAN, которые должны быть рандомно отображены в чеке.
Также, я не понял что писать в скрипте Python
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.07.2024, 16:35
Насколько знаете питон? Судя то потому, что вы называете его "скриптом" - то совсем нет.

Начните с постановки задачи. Что входные данные, что нужно сделать. Потом начните описывать модели данных (структуры, если понятнее). Как будете создавать данные (экземпляры структур), чем заполнять.

Как от тестера от вас ожидают, что вы рассмотрите все варианты, которые можно проверить и подберёте интересные кейсы, которые формально допустимы схемой, но программист мог их не предусмотреть.

Добавлено через 5 минут
iSmokeJC, тут твои любимые регулярки (только они невалидные и по ним нужно наоборот сгенерировать несколько миллионов данных).
1
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
03.07.2024, 16:38  [ТС]
Питон знаю базово, а скриптом было названо в задании, поэтому так и выразился

То есть мне нужно написать на Питоне код, который создает XML по соответствующему сценарию, но берёт при этом всевозможные комбинации данных, чтобы проверить работоспособность кода?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.07.2024, 16:39
Да.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.07.2024, 16:40
Рыжий Лис,
Кликните здесь для просмотра всего текста
0
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
03.07.2024, 16:44  [ТС]
А по какому алгоритму лучше действовать при написании кода? То есть мне нужно преобразовать сценарий в код Питона, который создаёт XML? Или из сценария преобразовать сначала в XML, а далее в код? С другой стороны, в задании написано именно код, который создаёт XML.

Также не совсем понимаю в каком виде имеется в виду чек. Возможно, вы имели с таким дело?

И последний вопрос, не нашёл на Ютубе инструкций как сценарий подстроить под код? Нужна, вероятно, библиотека, которая будет считывать сценарий или как? Возможно, у вас есть материалы по этому поводу, или, если не сложно, объясните, пожалуйста, поподробнее как мне действовать, как чайнику
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.07.2024, 16:47
iSmokeJC, да ладно тебе, то только посмотри, как они "изящно" хранят datetime:

Code
1
[0-3][0-9][0-1][0-9][0-9]{2}[0-2][0-9][0-5][0-9]
Или float, прям руки чешутся написать без дробной части:

Code
1
[-]?\d+\.\d{0,2}
Добавлено через 51 секунду
MadaraMan, что вы понимаете под "сценарием"? На мой взгляд сценарий = скрипт = код.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
03.07.2024, 16:48
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
[-]?
бугагааа
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.07.2024, 16:56
Цитата Сообщение от MadaraMan Посмотреть сообщение
в каком виде имеется в виду чек.
Пример приведён, вот примерно валидный чек, который вы должны создать и сохранить в файл:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<Cheque
    inn="0000000000"
    kpp="000000000"
    address="Test"
    name="Test"
    kassa="1"
    shift="1"
    number="1"
    datetime="0101150000"
>
    <Bottle 
        price="10.00"
        barcode="22N00000XOPN13MM66T0HVF311220130003476539219152175585956302712947101"
        ean="4607005090812"
        volume="1.0000"
    />
</Cheque>
Добавлено через 5 минут
Вот кстати, ещё одна схема курильщика:

XML
1
2
3
4
5
                              <xs:element type="xs:dateTime" name="StartEvent">
                                 <xs:annotation>
                                    <xs:documentation>Дата и время начала мероприятия. Формат RFC3339 шаблон "2006-01-02T15:04:05+03:00". Задавать значение только по московскому времени</xs:documentation>
                                 </xs:annotation>
                              </xs:element>
Две проблемы:
1) разработчики не осилили часовые пояса
2) моя библиотека не может провалидировать схему с типом данных xs:dateTime (мои проблемы)
2
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
04.07.2024, 16:56  [ТС]
Я написал код под задание. Не могли бы вы проверить, пожалуйста?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import xml.etree.ElementTree as ET
import random
 
# Читаем содержимое файлов EAN.txt и INN.txt
with open("EAN.txt", "r") as f_ean:
    ean_list = [line.strip() for line in f_ean]
 
with open("INN.txt", "r") as f_inn:
    inn_list = [line.strip() for line in f_inn]
 
# Создаем корневой элемент
cheque = ET.Element("Cheque")
 
ean = random.choice(ean_list)
inn = random.choice(inn_list)
 
# Добавляем атрибуты корневому элементу
cheque.set("inn", inn)
cheque.set("kpp", "000000000")
cheque.set("address", "Test")
cheque.set("name", "Test")
cheque.set("kassa", "1")
cheque.set("shift", "1")
cheque.set("number", "1")
cheque.set("datetime", "0101150000")
 
# Создаем элемент "Bottle"
bottle = ET.Element("Bottle")
 
# Добавляем атрибуты элементу "Bottle"
bottle.set("price", "10.00")
bottle.set("barcode", "22N00000XOPN13MM66T0HVF311220130003476539219152175585956302712947101")
bottle.set("ean", ean)
bottle.set("volume", "1.0000")
 
# Добавляем элемент "Bottle" к корневому элементу
cheque.append(bottle)
 
# Создаем XML строку
xml_string = ET.tostring(cheque, encoding="utf-8")
 
# Записываем XML строку в файл
with open("cheque.xml", "w") as f:
    f.write(xml_string.decode("utf-8"))
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.07.2024, 17:07
Один пакет готов, осталось ещё 999'999.

А если серьёзно, то ты даже пример не смог повторить (нет заголовка).
0
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
04.07.2024, 17:10  [ТС]
А что насчёт рандомных данных в атрибутах? Не совсем понимаю как это делать. Неужели под каждый атрибут функцию создавать? Они же отличаются параметрами, хоть и должны быть рандомными
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
04.07.2024, 17:21
А теперь слабо добавить 10 элементов Bottle в одном чеке?

Добавлено через 29 секунд
Можно и по функции на атрибут, но я бы просто сделал списки.

Добавлено через 10 минут
Python
1
2
3
4
5
6
random.seed(43)
kpp = (
    lambda: None,
    lambda: '{:09d}'.format(random.randint(0, 1e9 - 1)),
)
print(kpp[1]())
0
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
04.07.2024, 17:28  [ТС]
10 элементов, это по идее субэлементы с отличающимися id? Я в xml ещё больший профан, чем в питоне

В рандоме проблема в том что к каждому элементу свои требования. Где-то определенная количество символов, где-то нужно с бувами, а где-то чисто с цифрами. Поэтому не совсем понял, нужно ли перегружать код столькими функциями
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2024, 17:28
Помогаю со студенческими работами здесь

Загрузку данных из xml по схеме xsd в бд MS SQL
Имеется данные бд записанные в файл xml, схема БД описана в файле xsd. Требуется создать БД mysql по схеме и записать туда данные. Знаю,...

Экспорт данных из Ecxel в xml по схеме xsd
Кто сможет помочь? :cry: Есть таблица Excel с данными. Ее нужно выгрузить / экспортировать в формат xml по готовой схеме xsd. Через...

Правка XML по схеме XSD с внесением данных через PHP function (WP All Export)
Всем привет! Помогите решить такой вопрос, есть структура фида, вид: &lt;?xml version=&quot;1.0&quot;...

Проверка XML с XSD которой ссылается на другой XML файл
Допустим есть готовая структура с данными (xml1.xml) &lt;packet&gt; &lt;zap&gt; &lt;ID&gt;1&lt;/ID&gt; &lt;NAME&gt;NAME1&lt;/NAME&gt; ...

Создать XML файл из текстового и схемы xsd
Можно ли создать XML файл из текстового, имея схему xsd? Например, есть какие-то данные, занесенные в txt файл. Оттуда считать первую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru