Có cách nào, khi tôi phân tích cú pháp một tài liệu XML bằng lxml, để xác thực tài liệu đó chống lại DTD của nó bằng cách sử dụng một tệp danh mục bên ngoài? Tôi cần để có thể làm việc các thuộc tính cố định được định nghĩa trong DTD của tài liệu.Sử dụng một danh mục XML với lxml của Python?
Trả lời
Bạn có thể đưa ra ví dụ không? Theo lxml validation docs, lxml có thể xử lý xác thực DTD (được chỉ định trong tài liệu XML hoặc mã bên ngoài) và danh mục hệ thống, bao gồm hầu hết các trường hợp tôi có thể nghĩ đến.
f = StringIO("<!ELEMENT b EMPTY>")
dtd = etree.DTD(f)
dtd = etree.DTD(external_id = "-//OASIS//DTD DocBook XML V4.2//EN")
Dường lxml mà không vạch trần tính năng libxml2 này, grepping nguồn duy nhất lần lượt lên một số # định nghĩa cho việc xử lý lỗi:
C:\Dev>grep -ir --include=*.px[id] catalog lxml-2.1.1/src | sed -r "s/\s+/ /g"
lxml-2.1.1/src/lxml/dtd.pxi: catalog.
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_FROM_CATALOG = 20 # The Catalog module
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_WAR_CATALOG_PI = 93 # 93
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_MISSING_ATTR = 1650
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_ENTRY_BROKEN = 1651 # 1651
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_PREFER_VALUE = 1652 # 1652
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_NOT_CATALOG = 1653 # 1653
lxml-2.1.1/src/lxml/xmlerror.pxd: XML_CATALOG_RECURSION = 1654 # 1654
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG=20
lxml-2.1.1/src/lxml/xmlerror.pxi:WAR_CATALOG_PI=93
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_MISSING_ATTR=1650
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_ENTRY_BROKEN=1651
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_PREFER_VALUE=1652
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_NOT_CATALOG=1653
lxml-2.1.1/src/lxml/xmlerror.pxi:CATALOG_RECURSION=1654
Từ catalog implementation in libxml2 page có vẻ như có thể là 'minh bạch' việc xử lý thông qua cài đặt trong/etc/xml/catalog vẫn có thể hoạt động trong lxml, nhưng nếu bạn cần nhiều hơn, bạn luôn có thể bỏ lxml và sử dụng các ràng buộc python mặc định, làm lộ các hàm danh mục.
Bạn có thể thêm các cửa hàng để biến XML_CATALOG_FILES
môi trường:
os.environ['XML_CATALOG_FILES'] = 'file:///to/my/catalog.xml'
Xem this thread. Lưu ý rằng các mục nhập trong XML_CATALOG_FILES
là các URL được phân cách bằng dấu cách. Bạn có thể sử dụng số pathname2url
và urljoin
của Python (với file:
) để tạo URL từ tên đường dẫn.
- 1. Máy in Python khá XML với lxml
- 2. Cách cập nhật tệp XML với lxml
- 3. XML Declaration standalone = "yes" lxml
- 4. Xuất bản một bài đăng bằng cách sử dụng XML-RPC WordPress API và Python với danh mục
- 5. Viết tệp xml bằng thư viện lxml bằng Python
- 6. Python sax để lxml cho 80 + GB XML
- 7. Làm cách nào để sử dụng không gian tên xml với tìm/tìm thấy trong lxml?
- 8. python lxml trên công cụ ứng dụng?
- 9. Python - Xác thực với nhiều lược đồ bằng cách sử dụng lxml
- 10. Tạo một loại tài liệu với etx của lxml
- 11. Làm thế nào để tìm đệ quy cho một thẻ XML bằng cách sử dụng LXML?
- 12. Bối rối khi sử dụng một lớp hoặc một hàm: Viết các tệp XML bằng cách sử dụng lxml và Python
- 13. Phân tích cú pháp XML của Python
- 14. Sử dụng chỉ mục để lấy một mục, Python
- 15. sử dụng lxml và iterparse() để phân tích tệp XML lớn (+ - 1Gb)
- 16. Sử dụng Danh mục XML có thư viện Java sử dụng JAXP trong nội bộ
- 17. Lỗi 'không thể tải thực thể bên ngoài' khi sử dụng Python lxml
- 18. Mã hóa bằng python với lxml - giải pháp phức tạp
- 19. Sử dụng bộ nhớ cao của Python với BeautifulSoup
- 20. Sử dụng Định dạng Chuỗi Python với Danh sách
- 21. Slicing một danh sách sử dụng một biến, bằng Python
- 22. Nhập nhiều tệp XSD vào danh mục XML của Eclipse
- 23. Trong Python, tìm mục trong danh sách của dicts, sử dụng bisect
- 24. Sử dụng ftplib của Python để lấy danh sách thư mục, có thể là
- 25. Sử dụng kho văn bản riêng của tôi để phân loại danh mục bằng Python NLTK
- 26. Nhận 'NhậpError: không thể nhập tên etree' khi sử dụng lxml bằng Python trên Mac
- 27. Beautifulsoup4 với lxml vs Beautifulsoup3
- 28. Sử dụng bí danh với nohup
- 29. Đăng tệp XML bằng cách sử dụng Python
- 30. Chỉnh sửa văn bản XML từ một tệp XML bằng cách sử dụng Python