Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
problemy z parsowaniem xml z zipa
09-07-2024, 10:24,
#1
problemy z parsowaniem xml z zipa
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


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Ładowanie XML w treeView (Qt) Karoluss96 2 1 930 21-06-2022, 12:25
Ostatni post: Karoluss96
  BDOO XML kapiszon85 6 8 390 10-06-2020, 08:30
Ostatni post: tm261700
  CODGiK Punkty adresowe zmniejszenie pliku XML Loozak 5 18 877 13-10-2016, 13:09
Ostatni post: pelekPL
  konwersja SVG+XML na SHP Kristoforos 1 17 444 08-12-2009, 16:56
Ostatni post: borys

Skocz do: