lxml 可以用来检查 xml 文件是否格式正确,或者它是否太强大了?
Can lxml be used to check if xml file is well formed, or is it too powerful?
lxml 可以用来检查 xml 是否格式正确还是太强大了?例如,即使 xml 格式不正确,它似乎也能解析。检查 xml 文件格式是否正确的最简单方法是什么?
lxml
在解析格式不正确的 XML 时应该抛出异常,例如:
from lxml import etree
xml = """
<multipleroot>
<noclosingtag>
</multipleroot>
<multipleroot></multipleroot>"""
doc = etree.fromstring(xml)
抛出异常:
Traceback (most recent call last):
File "D:\Whosebug\Python\Q50.py", line 8, in <module>
doc = etree.fromstring(xml)
......
......
XMLSyntaxError: Opening and ending tag mismatch: noclosingtag line 3 and multipleroot, line 4, column 16
但是,如果您 明确地 告诉 XMLParser
恢复格式不正确的 XML,或者您正在使用 HTMLParser
,lxml
可能仍然能够解析 XML :
from lxml import etree
xml = """
<multipleroot>
<noclosingtag>
</multipleroot>
<multipleroot></multipleroot>"""
parser = etree.XMLParser(recover=True)
#parser = etree.HTMLParser()
doc = etree.fromstring(xml, parser=parser)
print(etree.tostring(doc))
成功打印解析 XML :
<multipleroot>
<noclosingtag>
</noclosingtag>
<multipleroot/></multipleroot>
lxml 可以用来检查 xml 是否格式正确还是太强大了?例如,即使 xml 格式不正确,它似乎也能解析。检查 xml 文件格式是否正确的最简单方法是什么?
lxml
在解析格式不正确的 XML 时应该抛出异常,例如:
from lxml import etree
xml = """
<multipleroot>
<noclosingtag>
</multipleroot>
<multipleroot></multipleroot>"""
doc = etree.fromstring(xml)
抛出异常:
Traceback (most recent call last):
File "D:\Whosebug\Python\Q50.py", line 8, in <module>
doc = etree.fromstring(xml)
......
......
XMLSyntaxError: Opening and ending tag mismatch: noclosingtag line 3 and multipleroot, line 4, column 16
但是,如果您 明确地 告诉 XMLParser
恢复格式不正确的 XML,或者您正在使用 HTMLParser
,lxml
可能仍然能够解析 XML :
from lxml import etree
xml = """
<multipleroot>
<noclosingtag>
</multipleroot>
<multipleroot></multipleroot>"""
parser = etree.XMLParser(recover=True)
#parser = etree.HTMLParser()
doc = etree.fromstring(xml, parser=parser)
print(etree.tostring(doc))
成功打印解析 XML :
<multipleroot>
<noclosingtag>
</noclosingtag>
<multipleroot/></multipleroot>