10

lxmlを使用してXMLドキュメントを解析するときに、外部カタログファイルを使用してそのドキュメントをDTDに対して検証する方法はありますか?ドキュメントのDTDで定義された固定属性を処理できる必要があります。

4

3 に答える 3

8

XML_CATALOG_FILESカタログを環境変数に追加できます。

os.environ['XML_CATALOG_FILES'] = 'file:///to/my/catalog.xml'

このスレッドを参照してください。のエントリXML_CATALOG_FILESはスペースで区切られた URL であることに注意してください。Python のpathname2urland urljoin(with file:) を使用して、パス名から URL を生成できます。

于 2011-12-05T20:54:36.420 に答える
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")
于 2008-08-16T07:57:53.657 に答える
0

lxml はこの libxml2 機能を公開していないようです。ソースを grep すると、エラー処理のためにいくつかの #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

libxml2 ページのカタログ実装から、/etc/xml/catalog へのインストールによる「透過的な」処理が lxml でも機能する可能性があるように見えますが、それ以上のものが必要な場合は、いつでも lxml を放棄してデフォルトの python バインディングを使用できます。カタログ機能を公開します。

于 2008-08-30T18:10:33.757 に答える