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

时间:2016-10-28 23:32:40

标签: python python-2.7 python-3.x xml-parsing elementtree

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

1 个答案:

答案 0 :(得分:3)

如果标记不匹配,那么您正在处理的输入不是XML(因为它的格式不正确)。没有办法用ElementTree“忽略”不匹配的标签。

lxml库中的XMLParser类具有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)

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

<root> 
  <foo>ABC</foo>
  <baz>DEF</baz> 
</root>