忽略 xml.etree.ElementTree.XMLParser Python 中不匹配的标签

Dha*_*dan 3 python elementtree xml-parsing python-2.7 python-3.x

有没有办法忽略 Python xml.etree.ElementTree.XMLParser 中不匹配的标签?

mzj*_*zjn 5

如果存在不匹配的标签,则您正在处理的输入根据定义不是 XML(因为它的格式不正确)。使用 ElementTree 无法“忽略”不匹配的标签。


XMLParserlxml 库中的类有一个recover构造函数参数(参见http://lxml.de/api/lxml.etree.XMLParser-class.html)。当 时recover=True,lxml 将尝试修复格式错误的输入。例子:

from lxml import etree

BADINPUT = """
<root> 
  <foo>ABC</bar> 
  <baz>DEF</baz> 
</root>"""

parser = etree.XMLParser(recover=True)
root = etree.fromstring(BADINPUT, parser)
print etree.tostring(root)
Run Code Online (Sandbox Code Playgroud)

输出(坏的</bar>结束标记已更改为</foo>):

<root> 
  <foo>ABC</foo>
  <baz>DEF</baz> 
</root>
Run Code Online (Sandbox Code Playgroud)