Python如何将多个XML响应追加写入同一个文件中
多XML响应合并存储解决方案
问题根因
你的代码只输出最后一个响应内容的原因有两个:
- 循环迭代时每次新的XML解析结果都会覆盖之前的
root、tree变量,循环结束后变量仅保留最后一次请求的XML结构 tree.write()方法默认是覆盖写入模式,且你将写操作放在了循环外部,自然只会写入最后一次的XML内容
注意:XML规范要求单个文件只能有一个根节点,不能直接将多个XML文本简单拼接,否则会生成无效XML文件,后续无法正常解析
解决方案
方案1:生成合法的统一XML文件(推荐)
先创建公共根节点,将每次请求拿到的XML根节点作为子节点存入公共根节点,最后统一写入文件:
import requests import xml.etree.ElementTree as ET # 测试FEIN列表 feins = ['800228936', '451957238'] # 创建统一的公共根节点 combined_root = ET.Element("combined_responses") for fein in feins: resp = requests.get( 'https://pdb-services.nipr.com/pdb-xml-reports/hitlist_xml.cgi?report_type=0&id_fein={}'.format(fein), auth=('test', 'test') ) # 解析当前响应的XML根节点 current_root = ET.fromstring(resp.text) # 将当前响应根节点添加到公共根节点下 combined_root.append(current_root) # 生成完整XML树写入文件 tree = ET.ElementTree(combined_root) tree.write("file.xml", encoding="utf-8", xml_declaration=True)
方案2:纯文本追加原始响应(仅适用于备份场景)
如果不需要输出合法XML,只是要留存所有原始响应内容,可以在循环内用追加模式写入文件,可添加分隔符方便后续拆分:
import requests feins = ['800228936', '451957238'] for fein in feins: resp = requests.get( 'https://pdb-services.nipr.com/pdb-xml-reports/hitlist_xml.cgi?report_type=0&id_fein={}'.format(fein), auth=('test', 'test') ) # 追加模式打开文件写入 with open("file.xml", "a", encoding="utf-8") as f: f.write(f"\n<!-- FEIN: {fein} 响应分隔 -->\n") f.write(resp.text)
注意事项
- 运行代码前需先安装requests依赖,执行命令:
pip install requests - 常规使用优先选择方案1,输出的文件符合XML规范,可直接解析使用
内容的提问来源于stack exchange,提问作者Marko Nestorovic
相关产品推荐
相关产品推荐

