我正在以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解析器知道实体目前,我在LXML库中使用Python我调用xmlparser如下:
parser = etree.XMLParser(target=SimpleXMLHandler(), resolve_entities=False, load_dtd=dtd, dtd_validation=False, recover=True)
但是,我还是马上得到一个错误,即第361行中的外部DTD无效我怎样才能避免这个问题?我不是DTD的实现者,所以我不愿意修复它。
当做!
最佳答案
正如Chrono Kitsune已经指出的:问题在于xml与sgml的对比:DTD不是一个正确的xmldtd,因为它是一个sgmldtd。
我建议首先将sgml文档转换为xml,例如使用sx。