如何在没有dtd验证和使用lxml的情况下解析xml?

时间:2015-03-26 10:21:16

标签: python xml lxml

我尝试使用以下代码无效 dtd / xml

<city>
<address>
      <zipcode>4455</zipcode>
</address>

我试图用lxml解析

像这样,

from lxml import etree as ET

parser = ET.XMLParser(dtd_validation=False)
tree = ET.fromstring(xml_data,parser)
print(tree.xpath('//zipcode'))

不幸的是,此代码仍然会出现xml错误,

我知道如何获得上述xml的非验证解析吗?

1 个答案:

答案 0 :(得分:1)

假设' invalid dtd '意味着上面的XML示例中没有关闭<city>标记,那么您的文档实际上是无效的XML 或坦率地说,它根本不是XML,因为它不遵循XML规则。

您需要以某种方式修复文档才能将其视为XML文档。对于这个简单的未闭合标签案例,设置recover=True将完成工作:

from lxml import etree as ET

parser = ET.XMLParser(recover=True)
tree = ET.fromstring(xml_data,parser)
print(tree.xpath('//zipcode'))