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

how to parse xml without dtd validation and using 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 的 非验证 解析吗?

假设“无效的 dtd”是指 <city> 标签在上面的 XML 示例中没有关闭,那么您的文档实际上是 无效 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'))