提问人:James Sulak 提问时间:8/16/2008 更新时间:1/8/2021 访问量:2541
将 XML 目录与 Python 的 lxml 一起使用?
Using an XML catalog with Python's lxml?
答:
1赞
Michael Twomey
8/16/2008
#1
你能举个例子吗?根据 lxml 验证文档,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赞
gz.
8/31/2008
#2
似乎 lxml 没有公开这个 libxml2 功能,grepping 源只会为错误处理带来一些 #defines:
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
从 libxml2 页面中的目录实现来看,通过 /etc/xml/catalog 中的安装进行的“透明”处理似乎仍然可以在 lxml 中工作,但如果您需要更多,您可以随时放弃 lxml 并使用默认的 python 绑定,这确实公开了目录函数。
9赞
Brecht Machiels
12/6/2011
#3
您可以将目录添加到环境变量中:XML_CATALOG_FILES
os.environ['XML_CATALOG_FILES'] = 'file:///to/my/catalog.xml'
请参阅此线程。请注意,中的条目是以空格分隔的 URL。您可以使用 Python 的 and(带有 )从路径名生成 URL。XML_CATALOG_FILES
pathname2url
urljoin
file:
评论