-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxmlsort.py
executable file
·61 lines (50 loc) · 2.93 KB
/
xmlsort.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
#!/usr/bin/python3
from lxml import etree
fname_key = {
'instancat/UP-FCEA-DA-AS2017.xml':'05',
'instancat/UP-FME-AS2017.xml':'06',
'instancat/UP-FECE-AS2018.xml':'07'} # instancat\\UP-FCEA... për përdoruesit e Windows-it.
count = 0
## Funksioni që bën ndryshimin e atributeve të etiketave.
def sort_tag(tag,attr,code):
for i in root.iter(tag):
if(attr in i.attrib):
temp = i.get(attr)
i.set(attr,temp[0] + code + temp[1:])
###########################################################
## Funksioni që kopjon etiketat e ndryshuara dhe i vendos në objektin(element tree) e fajllit final(output.xml).
def write_tag(tag,method = None): # Atributi 'method = None' eshte per ta mbingarkuar funksionin/
for i in root.findall('./'+tag+'/'):
if method is None:
root1.find(tag).append(i)
else:
if(i.get('type') == "period"):
last = root1.findall('./constraints/constraint[@type = "period"]')[-1] #Gjej elementin e fundit të listës së etiketave 'timeslot'.
parent = last.getparent()
parent.insert(parent.index(last)+1,i) #Shkruaj etiketen 'timeslot' të instancë aktuale pas
elif(i.get('type') == 'room'): # asaj të instances finale(tree1,output.txt).
lastR = root1.findall('./constraints/constraint[last()]')[-1]
parentR = lastR.getparent()
parentR.insert(parent.index(lastR)+1,i)
###########################################################
for fname in fname_key:
tree = etree.parse(fname)
root = tree.getroot()
sort_tag('course','id',fname_key[fname])
sort_tag('course','ref',fname_key[fname])
sort_tag('course','teacher',fname_key[fname])
sort_tag('room','id',fname_key[fname])
sort_tag('room','ref',fname_key[fname])
sort_tag('curriculum','id',fname_key[fname])
sort_tag('constraint','course',fname_key[fname])
if(count == 0): # Objekti i fajllit të parë kopjohet në objektin 'tree1' të fajllit final(output.xml) në mënyrë
tree1 = tree # që ta kemi strukturen e fajllit final te gatshme.
root1 = tree1.getroot() # 'count == 0' është përdorur variabla count për të numëruar në 'dictionary(map,hash)'
count = 1 # për arsye se në 'dictionary' nuk kemi mundësi të indeksojmë.
else:
write_tag('courses')
write_tag('rooms')
write_tag('curricula')
write_tag('constraints',True)
root1.set('name','TechnicalFacultiesAutumnInstance')
tree1.write('output.xml',xml_declaration=True,encoding='utf-8',standalone=False) # Bën "uparse" objektin 'tree1' dhe "write" në fajllin 'output.xml'