uruchomić ten potwierdzenia przy użyciu lxml:Jak mogę naprawić błąd importu XSD w lxml?
parser = etree.XMLParser()
try:
root = etree.fromstring(xml_content.strip(), parser)
except Exception as e:
raise XMLFormatException(str(e), XMLFormatException.IN_XML)
try:
schema = etree.XMLSchema(etree.XML(xsd_content.strip()))
except Exception as e:
raise XMLFormatException(str(e), XMLFormatException.IN_XSD)
if not schema.validate():
raise XMLValidationException("Se produjo un error al validar el XML", schema.error_log)
Przyjmij xml_content
i xsd_content
są prawidłowo instancję. Część zawartości xsd jest taka:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation="xmldsig-core-schema.xsd" />
<!-- more stuff here -->
</xsd:schema>
Kiedy uruchomić skrypt pojawia się błąd:
failed to load external entity "xmldsig-core-schema.xsd"
Kiedy uderzę http://www.w3.org/2000/09/xmldsig# w przeglądarce, otrzymuję treść xsd.
Q: Czego mi tu brakuje? Jak mogę uniknąć takiego błędu?
Edit Uwagi:
- Ten błąd występuje przed walidacji mogą być wykonane (tj Ten błąd występuje w konstruktorze XMLSchema).
- Plik xsd jest dostarczany z zewnętrznego źródła i nie wolno mi go edytować.
Nie mogę zmienić takiego pliku. Plik jest dostarczany przez lokalną organizację rządową. –
Następnie upewnij się, że masz kopię xmldsig-core-schema.xsd w tym samym katalogu co importujący XSD. – kjhughes
Biorę twoje rozwiązanie. Teraz mogę edytować plik. Powód błędu: chłopaki (@ rząd !!!), którzy skomponowali XML, zrobili to źle !!. Wziąłem twoje drugie rozwiązanie. –