5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27

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

03.07.2024, 15:14. Показов 1580. Ответов 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 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru