2008-08-15 81 views

回答

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的pathname2urlurljoin(與file:)從路徑名生成URL。