tôi chạy xác nhận này sử dụng lxml:Làm cách nào để khắc phục lỗi nhập XSD trong 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)
Giả xml_content
và xsd_content
được khởi tạo một cách chính xác. Một phần của nội dung XSD là thế này:
<?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>
Khi tôi chạy kịch bản tôi nhận được một lỗi:
failed to load external entity "xmldsig-core-schema.xsd"
Khi tôi nhấn http://www.w3.org/2000/09/xmldsig# trong trình duyệt, tôi nhận được một nội dung XSD.
Q: Tôi thiếu gì ở đây? Làm thế nào tôi có thể tránh được lỗi như vậy?
Sửa Ghi chú:
- Lỗi này xảy ra trước khi xác nhận có thể được thực hiện (ví dụ: lỗi này xảy ra trong các nhà xây dựng XMLSCHEMA).
- Tệp xsd được cung cấp từ nguồn bên ngoài và tôi không được phép chỉnh sửa nó.
Tôi không thể thay đổi tệp đó. Tệp được cung cấp bởi một tổ chức chính quyền địa phương. –
Sau đó, hãy đảm bảo rằng bạn có một bản sao của xmldsig-core-schema.xsd trong cùng thư mục với XSD nhập. – kjhughes
Tôi lấy giải pháp của bạn. Ngay bây giờ tôi được phép chỉnh sửa tệp. Lý do của lỗi: Các chàng trai (@ chính phủ !!!), người sáng tác XML đã làm sai !! Tôi đã lấy giải pháp thứ hai của bạn. –