lxml提供了一些不同的函数来解析字符串。其中两个etree.fromstring()
和etree.XML()
看起来非常相似。前者的文档字符串表示它用于解析“字符串”,而后者表示“字符串常量”。此外,XML()
的文档字符串状态:
此函数可用于在Python代码中嵌入“XML文字”,[...]
这些功能之间的功能区别是什么?应该何时使用另一个?
答案 0 :(得分:5)
查看source code,XML()
和fromstring()
,前者有额外的代码片段:
if parser is None:
parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
if not isinstance(parser, XMLParser):
parser = __DEFAULT_XML_PARSER
因此副作用不同:XML()
仅使用默认的XML解析器作为默认解析器。如果默认解析器已更改为非XMLParser
,XML()
将忽略它。
etree.set_default_parser(etree.HTMLParser())
etree.tostring(etree.fromstring("<root/>"))
# b'<html><body><root/></body></html>'
etree.tostring(etree.XML("<root/>"))
# b'<root/>'