4 from io
import StringIO
5 import xml.etree.ElementTree
as ET
11 import LeenoDialogs
as DLG
14 from com.sun.star.sheet.CellFlags
import \
15 VALUE, DATETIME, STRING, ANNOTATION, FORMULA, HARDATTR, OBJECTS, EDITATTR, FORMATTED
19 estrae dal file XML i dati dell'elenco prezzi
20 I dati estratti avranno il formato seguente:
30 artList = { codice : articolo, ... }
32 superCatList = { codice : descrizione, ... }
33 catList = { codice : descrizione, ... }
37 'superCategorie': superCatList,
45 if data.find(
"xmlns:PRT=") < 0:
46 pattern =
"<PRT:Prezzario>"
47 pos = data.find(pattern) + len(pattern) - 1
48 data = data[:pos] +
' xmlns:PRT="mynamespace"' + data[pos:]
55 intestazione = root.find(
'intestazione')
56 autore = intestazione.attrib[
'autore']
59 dettaglio = intestazione.find(
'dettaglio')
60 anno = dettaglio.attrib[
'anno']
61 area = dettaglio.attrib[
'area']
63 copyright = intestazione.find(
'copyright')
64 ccType = copyright.attrib[
'tipo']
65 ccDesc = copyright.attrib[
'descrizione']
69 titolo =
"Elenco prezzi - " + area +
" - anno " + anno +
"\n"\
70 +
"Copyright: " + ccType +
" - " + ccDesc
72 contenuto = root.find(
'Contenuto')
73 articoli = contenuto.findall(
'Articolo')
79 for articolo
in articoli:
82 codice = articolo.attrib[
'codice']
85 codiceSplit = codice.split(
'.')
86 codiceSuperCat = codiceSplit[0]
87 codiceCat = codiceSuperCat +
'.' + codiceSplit[1]
90 superCat = articolo.find(
'tipo').text
91 cat = articolo.find(
'capitolo').text
94 if not codiceSuperCat
in superCatList:
95 superCatList[codiceSuperCat] = superCat
96 if not codiceCat
in catList:
97 catList[codiceCat] = cat
99 voce = articolo.find(
'voce').text
102 art = articolo.find(
'articolo').text
105 desc = voce +
'\n' + art
113 '\t',
' ').replace(
'\n',
' ').replace(
'\n\n',
'\n').replace(
'è',
'è').replace(
114 '°',
'°').replace(
'Ã',
'à').replace(
' $',
'')
116 desc = desc.replace(
' ',
' ')
117 while '\n\n' in desc:
118 desc = desc.replace(
'\n\n',
'\n')
120 um = articolo.find(
'um').text
121 prezzo = articolo.find(
'prezzo').text
126 if prezzo
is not None:
127 if '.' not in prezzo:
128 prezzo = prezzo +
'.0'
129 prSplit = prezzo.split(
'.')
131 for p
in prSplit[0:-1]:
133 prezzo +=
'.' + prSplit[-1]
134 prezzo = float(prezzo)
136 analisi = articolo.find(
'Analisi')
137 if analisi
is not None:
140 oneriSic = float(analisi.find(
'onerisicurezza').attrib[
'valore'])
145 mdo = float(analisi.find(
'incidenzamanodopera').attrib[
'percentuale']) / 100
160 'sicurezza': oneriSic
167 'superCategorie': superCatList,
168 'categorie': catList,