You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:45:03