Python:在LXML中避免DTD验证

3 投票
1 回答
1030 浏览
提问于 2025-04-16 20:48

我正在处理2001年的USPTO专利,这些专利是用SGML格式写的。在每个文件的顶部,有一个外部的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 个回答

5

正如Chrono Kitsune所提到的:问题出在xml和sgml之间:这个DTD不是一个正确的xml DTD,因为它是一个sgml DTD。

我建议先把sgml文档转换成xml,比如可以使用sx这个工具。

撰写回答