我正在使用lxml来解析一些xml。某些标签的格式错误会导致lxml抛出错误。我们想跳过“Tag1”并能够解析文档的其余部分。我们尝试了以下但仍然收到错误“lxml.etree.XMLSyntaxError:打开和结束标记不匹配:b”:
s = '<?xml version="1.0" encoding="UTF-8"?><myroot><Tag1><b>this is some malformed</Tag1><Tag2>We will continue on</Tag2></myroot>'
xml = etree.fromstring(s)
etree.strip_elements(xml, 'Tag1')
print xml.find('.//Tag2').text
发生错误是因为我们解析文档然后尝试忽略Tag1。在解析lxml中的文档之前有没有办法忽略Tag1?
谢谢!
答案 0 :(得分:1)
请改用lxml.html.fromstring()。它更宽容HTML-isms。 html版本可以无错误地读取您的样本。
答案 1 :(得分:0)
您可以使用BeautifulSoup来解析损坏的html(xml)。
import bs4
s = '<?xml version="1.0" encoding="UTF-8"?><myroot><Tag1><b>this is some malformed</Tag1><Tag2>We will continue on</Tag2></myroot>'
root=bs4.BeautifulSoup(s, 'lxml')
print root.find('tag2').text #-> We will continue on