Dzień dobry,
Pojawia się problem z parsowaniem plików gml spakowanych w folder zip.
W wersji 3.22 bez problemu przechodzi instrukcja umożliwiająca walidację:
Kod:
def walidacja(self, task):
global walidacjaZWynikiemPozytywnym, plikiZparsowane, plikGML, walidowanyPlik
plikGML = pliki[int(task.description())]
try:
walidowanyPlik = lxml.etree.parse(plikGML)
unique_gmlid = set()
plikiZparsowane.append(plikGML)
if walidowanyPlik.getroot() != None:
error_gmlid_dic = {}
for element in list(walidowanyPlik.iter()):
if str(element.tag).endswith('featureMember'):
wynikWalidacji = xmlschema.validate(element)
if not wynikWalidacji:
walidacjaZWynikiemPozytywnym = False
for subelement in element:
error_gmlid_dic[xmlschema.error_log] = subelement.attrib['{http://www.opengis.net/gml/3.2}id']
return {'taskID':task.description(), 'plikGML':plikGML, 'error':error_gmlid_dic}
except lxml.etree.XMLSyntaxError as error:
walidacjaZWynikiemPozytywnym = False
error_gmlid_dic = {}
error_gmlid_dic[error] = ''
return {'taskID':task.description(), 'plikGML':plikGML, 'error':error_gmlid_dic}
except OSError as error:
walidacjaZWynikiemPozytywnym = False
error_gmlid_dic = {}
error_gmlid_dic[error] = ''
print ('2',error, plikGML)
return {'taskID':task.description(), 'plikGML':plikGML, 'error':error_gmlid_dic}
except Exception as e:
print(e)
gdzie pliki to tablica warstw w rozszerzeniu xml lub gml rozpakowywane kodem:
Kod:
for file in files:
if plik[1] == 'Plik skompresowany (*.zip)':
try:
plikGML = plikZIP.extract(file, sciezkaGML)
except:
self.iface.messageBar().pushMessage("Uwaga!", "Problem z rozpakowaniem pliku zip.", level = Qgis.Critical)
return
else:
plikGML = file
if plikGML[-3:] in ['xml','gml','XML','GML'] and not plikGML.__contains__("Uzytkownik"):
pliki.append(plikGML)
# a wcześniej:
if zipfile.is_zipfile(txt):
try:
plikZIP = zipfile.ZipFile(txt,'r') #txt to ścieżka to pliku
except:
self.iface.messageBar().pushMessage("Uwaga!", "Niepoprawny plik zip.", level = Qgis.Critical)
return
files = plikZIP.namelist()
if len(files):
nazwaPlikuLubPlikow = ''.join(files)
else:
files.append(txt)
nazwaPlikuLubPlikow = pathlib.Path(files[0]).name
zaś w nowszych 3.28 i 3.34 otrzymujemy błąd OSError o treści: Error reading file 'ścieżka do pliku': failed to load external entity "ścieżka do pliku".
Czy to wina biblioteki lxml?
Z góry dziękuje za każdą pomoc