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

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

03.07.2024, 15:14. Показов 1532. Ответов 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
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
12.07.2024, 01:53  [ТС]
Студворк — интернет-сервис помощи студентам
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
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
import xml.etree.ElementTree as ET
import random
import string
 
# Читаем содержимое файлов 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)
 
# Создаём функцию генератор рандомных зачений
 
def generate_random_value(data_type, min_value, max_value, step=None):
    if data_type == "int":
        return random.randint(min_value, max_value)
    elif data_type == "float":
        if step is None:
            return random.uniform(min_value, max_value)
        else:
            return round(random.uniform(min_value, max_value), step)
    elif data_type == "str_rus":
        return ''.join(random.choice(string.ascii_letters + "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ") for _ in range(random.randint(10, 20)))
    elif data_type == "str_lat":
        return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(random.randint(6, 12)))
    elif data_type == "barcode":
        return "22N" + "".join(random.choice(string.ascii_uppercase + string.digits) for _ in range(12)) + "MM66T0HVF311220130003476539219152175585956302712947101"
    elif data_type == "datetime":
        return f"{random.randint(1, 31)}{random.randint(1, 12)}{random.randint(2000, 2024)}{random.randint(0, 23)}{random.randint(0, 59)}{random.randint(0, 59)}"
    else:
        raise ValueError(f"Неизвестный тип данных: {data_type}")
 
 
 
# Добавляем атрибуты корневому элементу
cheque.set("inn", inn)
# случайное в соответствие с типом
cheque.set("kpp", generate_random_value("str_lat", 9, 10))
# случайный набор русских букв и 2ух пробелов, общая длина от 20 до 100
cheque.set("address", generate_random_value("str_rus", 20, 100))
# случайный набор русских букв длиной от 10 до 20
cheque.set("name", generate_random_value("str_rus", 10, 20))
# случайный набор латинских букв и цифр длиной от 6 до 12
cheque.set("kassa", generate_random_value("str_lat", 6, 12))
# случайное в соответствие с типом
cheque.set("shift", generate_random_value("int", 1, 10))
# случайное в соответствие с типом
cheque.set("number", generate_random_value("int", 1, 10))
# случайное в соответствие с типом
cheque.set("datetime", "0101150000")
 
# Создаем элемент "Bottle"
bottle = ET.Element("Bottle")
 
# Добавляем атрибуты элементу "Bottle"
 
# случайное от 100.00 до 1000.00
bottle.set("price", "10.00")
# случайное в соответствии с типом
bottle.set("barcode", "22N00000XOPN13MM66T0HVF311220130003476539219152175585956302712947101")
bottle.set("ean", ean)
# случайное от 0.1000 до 3.0000 с шагом 0.05
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"))

Почему-то выходит ошибка:

This page contains the following errors:
error on line 1 at column 1: Encoding error
0
5 / 0 / 0
Регистрация: 02.11.2014
Сообщений: 27
12.07.2024, 08:44  [ТС]
Я написал следующий код, но при открытии получившегося файла выдаётся ошибка error on line 1 at column 1: Encoding error


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
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
import xml.etree.ElementTree as ET
import random
import string
 
# Читаем содержимое файлов 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)
 
# Создаём функцию генератор рандомных зачений
 
def generate_random_value(data_type, min_value, max_value, step=None):
    if data_type == "int":
        return random.randint(min_value, max_value)
    elif data_type == "float":
        if step is None:
            return random.uniform(min_value, max_value)
        else:
            return round(random.uniform(min_value, max_value), step)
    elif data_type == "str_rus":
        return ''.join(random.choice(string.ascii_letters + "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ") for _ in range(random.randint(10, 20)))
    elif data_type == "str_lat":
        return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(random.randint(6, 12)))
    elif data_type == "barcode":
        return "22N" + "".join(random.choice(string.ascii_uppercase + string.digits) for _ in range(12)) + "MM66T0HVF311220130003476539219152175585956302712947101"
    elif data_type == "datetime":
        return f"{random.randint(1, 31)}{random.randint(1, 12)}{random.randint(2000, 2024)}{random.randint(0, 23)}{random.randint(0, 59)}{random.randint(0, 59)}"
    else:
        raise ValueError(f"Неизвестный тип данных: {data_type}")
 
 
 
# Добавляем атрибуты корневому элементу
cheque.set("inn", inn)
# случайное в соответствие с типом
cheque.set("kpp", generate_random_value("str_lat", 9, 10))
# случайный набор русских букв и 2ух пробелов, общая длина от 20 до 100
cheque.set("address", generate_random_value("str_rus", 20, 100))
# случайный набор русских букв длиной от 10 до 20
cheque.set("name", generate_random_value("str_rus", 10, 20))
# случайный набор латинских букв и цифр длиной от 6 до 12
cheque.set("kassa", generate_random_value("str_lat", 6, 12))
# случайное в соответствие с типом
cheque.set("shift", generate_random_value("int", 1, 10))
# случайное в соответствие с типом
cheque.set("number", generate_random_value("int", 1, 10))
# случайное в соответствие с типом
cheque.set("datetime", "0101150000")
 
# Создаем элемент "Bottle"
bottle = ET.Element("Bottle")
 
# Добавляем атрибуты элементу "Bottle"
 
# случайное от 100.00 до 1000.00
bottle.set("price", "10.00")
# случайное в соответствии с типом
bottle.set("barcode", "22N00000XOPN13MM66T0HVF311220130003476539219152175585956302712947101")
bottle.set("ean", ean)
# случайное от 0.1000 до 3.0000 с шагом 0.05
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
12.07.2024, 14:21
XML
1
<Cheque kpp="c7qFLnz" />
lol (неправильно)

А если я пишу так:
Python
1
cheque.set("shift", generate_random_value("int", 1, 10))
то ошибка
Code
1
2
3
4
5
6
7
8
9
10
11
12
Traceback (most recent call last):
  File "/usr/lib/python3.11/xml/etree/ElementTree.py", line 1041, in _escape_attrib
    if "&" in text:
       ^^^^^^^^^^^
TypeError: argument of type 'int' is not iterable
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "/usr/lib/python3.11/xml/etree/ElementTree.py", line 1018, in _raise_serialization_error
    raise TypeError(
TypeError: cannot serialize 2 (type int)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2024, 14:21
Помогаю со студенческими работами здесь

Загрузку данных из 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 файл. Оттуда считать первую...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru