您的位置:

提示DTDForbidden(name, sysid, pubid)的解决方案

  发布时间:2023-02-24 16:56:08
报错的原因DTDForbidden错误表明在解析XML文档时,XML处理器检测到了DTD 声明,但是没有权限访问它。例如,如果您使用lxml库,您可以使用以下代码禁止DTD加载:from lxml import etreeparser = etree.XMLParserdoc = etree.parse如果您使用的是其他XML解析器,则需要查看文档以找到禁用DTD加载的方法。如何解决要解决DTDForbidden错误,您需要在使用XML解析器时指定一个特殊的选项,以便它禁止加载DTD。如果XML文件中包含DTD声明,则此代码将成功解析文件,而不会出现DTDForbidden错误。

报错的原因

DTDForbidden错误表明在解析XML文档时,XML处理器检测到了DTD (Document Type Definition)声明,但是没有权限访问它。

这通常是由于您的代码尝试解析包含DTD声明的XML文档,但是没有在解析器上设置相应的选项,导致解析器尝试访问DTD并遇到错误。

要解决这个问题,您需要在使用XML解析器时指定一个特殊的选项,以便它禁止加载DTD。例如,如果您使用lxml库,您可以使用以下代码禁止DTD加载:


from lxml import etree

parser = etree.XMLParser(dtd_validation=False)
doc = etree.parse(xml_file, parser)

如果您使用的是其他XML解析器,则需要查看文档以找到禁用DTD加载的方法。

如何解决

要解决DTDForbidden错误,您需要在使用XML解析器时指定一个特殊的选项,以便它禁止加载DTD。

例如,如果您使用lxml库,您可以使用以下代码禁止DTD加载:


from lxml import etree

parser = etree.XMLParser(dtd_validation=False)
doc = etree.parse(xml_file, parser)

如果您使用的是其他XML解析器,则需要查看文档以找到禁用DTD加载的方法。

例如,如果您使用Python内置的xml.etree.ElementTree模块,则可以使用以下代码禁用DTD加载:


import xml.etree.ElementTree as ET

parser = ET.XMLParser(dtd_validation=False)
doc = ET.parse(xml_file, parser)

这样就可以解决DTDForbidden错误了。

使用例子

是的,以下是使用lxml库解析XML文件的示例代码,它禁止DTD加载:


from lxml import etree

# 解析XML文件
with open('document.xml', 'rb') as f:
    # 创建XML解析器,禁用DTD加载
    parser = etree.XMLParser(dtd_validation=False)
    # 使用解析器解析XML文件
    doc = etree.parse(f, parser)

# 遍历XML文档
for element in doc.iter():
    print(element.tag)

这段代码打开名为“document.xml”的XML文件,然后使用lxml库中的XML解析器创建一个解析器对象。 在创建解析器对象时,我们将dtd_validation选项设置为False,以禁止DTD加载。 然后,我们使用解析器对象解析XML文件,并使用iter()方法遍历XML文档中的所有元素。

如果XML文件中包含DTD声明,则此代码将成功解析文件,而不会出现DTDForbidden错误。