Python:避免使用LXML进行DTD验证

时间:2011-07-04 14:05:56

标签: python lxml dtd

我正在以SGML格式解析2001年的USPTO专利。在每个文件的顶部,引用了外部DTD。不幸的是,这个DTD似乎无效。有效性检查确认:

Line 361
Error: A '(' character or an element type is required within declaration of element type "ADR".
<!ELEMENT ADR  - - (OMC?,STR*,CITY?,CNTY?,STATE?,CTRY?,PCODE?,EAD*,TEL*,FAX* ...

但是,我不需要验证要处理的SGML文件。我只需要SGML解析器来了解实体。目前,我正在使用Python和LXML库。我按如下方式调用XMLParser:

parser = etree.XMLParser(target=SimpleXMLHandler(), resolve_entities=False, load_dtd=dtd, dtd_validation=False, recover=True)  

但是,我仍然在第361行立即收到外部DTD无效的错误。我该如何避免这个问题?我不是DTD的实现者,所以我不愿意修复它。

问候!

1 个答案:

答案 0 :(得分:5)

正如Chrono Kitsune已经指出:问题在于xml与sgml:DTD不是正确的xml dtd,因为它是一个sgml dtd。

我建议先将sgml文档转换为xml,例如使用sx