xml.etree.ElementTree如何直接解析字符串/缓冲区形式的XML
Python3 标准库直接解析内存中XML字符串/缓冲区的实现方案
不需要写入临时文件走磁盘IO,xml.etree.ElementTree原生支持内存内容解析,你之前遗漏了对应的接口:
- 方法1:使用
fromstring()直接解析字符串,返回值为XML根节点对象,适合简单解析场景
import xml.etree.ElementTree as ET # xmlbuffer 为接口返回的XML格式内容,同时支持str、bytes两种类型输入 xmlbuffer = b"""<?xml version="1.0" encoding="UTF-8"?> <site> <page id="home">首页</page> </site>""" root = ET.fromstring(xmlbuffer) # 后续正常遍历、查询节点即可 print(root.findtext("./page"))
- 方法2:如果你需要和
parse()方法完全一致的返回值(ElementTree对象,支持后续write等完整操作),可以借助标准库io模块把内存缓冲区包装为类文件对象传入,全程无磁盘读写:
import io import xml.etree.ElementTree as ET # 输入为str类型XML时用StringIO包装 tree = ET.parse(io.StringIO(xml_str_buffer)) # 输入为bytes类型XML(比如HTTP请求库直接返回的二进制响应内容)时用BytesIO包装 # tree = ET.parse(io.BytesIO(xml_bytes_buffer)) root = tree.getroot()
注意:如果XML响应带明确编码声明,优先直接传入bytes类型内容解析,避免手动解码导致的编码匹配错误。
内容的提问来源于stack exchange,提问作者Mark Hattarki
相关产品推荐
相关产品推荐

