-
Notifications
You must be signed in to change notification settings - Fork 0
/
XmlParser.py
120 lines (96 loc) · 4.29 KB
/
XmlParser.py
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import xml.etree.ElementTree as ET
from docutils.utils.math.latex2mathml import mi
import Data_Structures as ds
def xml2boxlist(xml_path):
root = ET.parse(xml_path).getroot()
boxlist = []
for box_tag in root.findall("Box"):
box_type = box_tag.find("Type").text
if box_type == 'Box':
width = float(box_tag.find("Width").text)
height = float(box_tag.find("Height").text)
depth = float(box_tag.find("Depth").text)
item = box_tag.find("ItemName").text
qty = int(box_tag.find("Quantity").text)
maxWeigth = float(box_tag.find("MaxWeight").text)
weight = float(box_tag.find("Weight").text)
for i in range(qty):
box = ds.Box(width, height, depth)
box.itemName = item
box.maximumWeight = maxWeigth
box.weight = weight
boxlist.append(box)
elif box_type == 'Cylinder':
radius = float(box_tag.find("Radius").text)
height = float(box_tag.find("Height").text)
item = box_tag.find("ItemName").text
qty = int(box_tag.find("Quantity").text)
maxWeigth = float(box_tag.find("MaxWeight").text)
weight = float(box_tag.find("Weight").text)
for i in range(qty):
box = ds.Box(2*radius, height, 2*radius) # constructor return the smallest box that contains the cylinder
box.itemName = item
box.maximumWeight = maxWeigth
box.weight = weight
boxlist.append(box)
return boxlist
# AGGIUNTO ORA
def xml2problem(xml_path):
root = ET.parse(xml_path).getroot()
boxlist = []
minDict = {}
maxDict = {}
for box_tag in root.findall("Box"):
box_type = box_tag.find("Type").text
if box_type == 'Box':
width = float(box_tag.find("Width").text)
height = float(box_tag.find("Height").text)
depth = float(box_tag.find("Depth").text)
item = box_tag.find("ItemName").text
qty = int(box_tag.find("Quantity").text)
maxWeigth = float(box_tag.find("MaxWeight").text)
weight = float(box_tag.find("Weight").text)
minQuantity = box_tag.find("MinQuantity")
if minQuantity is not None:
minDict[item] = int(minQuantity.text)
maxQuantity = box_tag.find("MaxQuantity")
if minQuantity is not None:
maxDict[item] = int(maxQuantity.text)
for i in range(qty):
box = ds.Box(width, height, depth)
box.itemName = item
box.maximumWeight = maxWeigth
box.weight = weight
boxlist.append(box)
elif box_type == 'Cylinder':
radius = float(box_tag.find("Radius").text)
height = float(box_tag.find("Height").text)
item = box_tag.find("ItemName").text
qty = int(box_tag.find("Quantity").text)
maxWeigth = float(box_tag.find("MaxWeight").text)
weight = float(box_tag.find("Weight").text)
minQuantity = box_tag.find("MinQuantity")
if minQuantity is not None:
minDict[item] = int(minQuantity.text)
maxQuantity = box_tag.find("MaxQuantity")
if minQuantity is not None:
maxDict[item] = int(maxQuantity.text)
for i in range(qty):
box = ds.Box(2*radius, height, 2*radius) # constructor return the smallest box that contains the cylinder
box.itemName = item
box.maximumWeight = maxWeigth
box.weight = weight
boxlist.append(box)
bin = root.findall("Bin")
if len(bin) > 0:
bin_width = int(bin[0].find("Width").text)
bin_height = int(bin[0].find("Height").text)
bin_depth = int(bin[0].find("Depth").text)
bin_maxWeight = float(bin[0].find("MaximumWeight").text)
else:
print('Error, the bin structure is not defined!!!')
return None
return ds.PalletizationModel(ds.Bin(bin_width, bin_height, bin_depth, bin_maxWeight),
boxlist,
maxDict=maxDict,
minDict=minDict)