python - lxml中 `etree.fromstring()`和 `etree.XML()`的功能区别是什么?

标签 python lxml

lxml提供了一些不同的函数来解析字符串。其中两个,etree.fromstring()etree.XML() ,看起来很像。前者的文档字符串说它用于解析“字符串”,而后者是“字符串常量”。此外,XML() 的文档字符串指出:

This function can be used to embed "XML literals" in Python code, [...]

这些函数之间的功能区别是什么?什么时候应该用一个代替另一个?

最佳答案

查看 source code , 对于 XML()fromstring() ,前者有这段额外的代码片段:

if parser is None:
    parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
    if not isinstance(parser, XMLParser):
        parser = __DEFAULT_XML_PARSER

因此它们在副作用上有所不同:XML() 仅使用默认的 XML 解析器作为默认的解析器。如果默认解析器更改为非 XMLParserXML() 将忽略它。

etree.set_default_parser(etree.HTMLParser())
etree.tostring(etree.fromstring("<root/>"))
# b'<html><body><root/></body></html>'
etree.tostring(etree.XML("<root/>"))
# b'<root/>'

关于python - lxml中 `etree.fromstring()`和 `etree.XML()`的功能区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535862/

相关文章:

python - 使用 lxml 和 Python 解析嵌套的 xml

python - 如何在 Python 中解析此 XML 响应?

python - 使用 Kafka 在应用程序上打开太多文件错误

python - Python代码解释——整数分割

python - 如何使用 lxml、XPath 和 Python 从网页中提取链接?

python - 使用 pymox 模拟 urllib2.urlopen 和 lxml.etree.parse

python - 使用 Python LXML 从 XML 读取元素值

python - Django 1.7 - 更新 base_site.html 不工作

python - 仅在 CSV 文件中查找第一个匹配项

python - 如何在 python 中执行相当于 "cp -r"的 linux