當我使用lxml解析XML文檔時,有沒有辦法使用外部目錄文件針對其DTD驗證該文檔?我需要能夠處理文檔DTD中定義的固定屬性。在Python的lxml中使用XML目錄?
7
A
回答
1
你能舉個例子嗎?根據lxml validation docs,lxml可以處理DTD驗證(在XML文檔中指定或在代碼中進行外部處理)和系統目錄,它涵蓋了我能想到的大多數情況。
f = StringIO("<!ELEMENT b EMPTY>")
dtd = etree.DTD(f)
dtd = etree.DTD(external_id = "-//OASIS//DTD DocBook XML V4.2//EN")
0
看來,lxml沒有讓本libxml2的功能,grepping源只變成了對錯誤處理一些#define語句:
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
從catalog implementation in libxml2 page看來可能是「透明」通過安裝在/ etc/xml /目錄中進行處理仍然可以在lxml中工作,但是如果您需要的不僅僅是這些,您總是可以放棄lxml並使用默認的python綁定,這些綁定會暴露目錄函數。
6
您可以將目錄添加到XML_CATALOG_FILES
環境變量:
os.environ['XML_CATALOG_FILES'] = 'file:///to/my/catalog.xml'
見this thread。請注意,XML_CATALOG_FILES
中的條目是空格分隔的網址。您可以使用Python的pathname2url
和urljoin
(與file:
)從路徑名生成URL。
相關問題
- 1. Python LXML目錄查找
- 2. 在python 3中用lxml解析xml 3
- 3. 用python和lxml忽略xml中的unicode?
- 4. 遍歷與LXML XML在Python
- 5. 如何使用Python中的lxml在xml中提取值
- 6. 閱讀使用Python XML文件LXML
- 7. 使用lxml在Python中存儲系統路徑的XML
- 8. 使用Python lxml的
- 9. 如何在Python和LXML中解析XML?
- 10. 在Python中使用XPath和ETXPath的LXML
- 11. 在python中使用lxml解析XML數據
- 12. 使用lxml庫在Python中解析xml時出錯
- 13. xpath到dic python,lxml和xml
- 14. 解析XML與LXML和Python
- 15. 解析XML與LXML和Python
- 16. 如何修改使用lxml的一個xml在Python
- 17. 目錄中的使用Python
- 18. 使用lxml解析XML
- 19. 拆分XML到使用LXML
- 20. 在Python中與LXML一起使用XPath
- 21. 在Python中使用lxml解析HTML,xpath
- 22. 如何在Python 3中使用lxml?
- 23. 解析XML文件LXML在Python
- 24. 從xml中使用python bs4和lxml提取值
- 25. 如何在使用lxml的XML元素名稱中使用「:」?
- 26. 的Python和LXML/XPath的:解析XML
- 27. lxml在xml中添加urlencoding?
- 28. 使用lxml解析Python中的ODF
- 29. 解析XML文件使用Python的lxml的包
- 30. 解析嵌套的XML與LXML和Python