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

API分页XML解析:如何获取单个连续XML页面?

解决方案:合并分页返回的独立XML节点

没问题,这种API分页返回多个独立根节点XML的情况很常见,我们可以通过手动合并节点的方式生成一个连续的完整XML文档。以下是具体的实现思路和代码调整方案:

核心思路

创建一个统一的<interactions>主根节点,每次请求分页数据后,将返回结果里的所有<interaction>子节点提取出来,追加到这个主根节点中。循环结束后,这个主根节点就包含了所有分页的交互数据,最后再将其转换为完整的XML字符串即可。

调整后的代码示例

import datetime
import requests
import xml.etree.ElementTree as et

# 初始化日期参数
dt = datetime.datetime.today() - datetime.timedelta(days=1)
dt_str = dt.strftime('%Y%m%d')

# 创建主根节点
main_root = et.Element("interactions")
n = 0  # 分页起始偏移量,初始为0(根据API实际规则调整,有些API从1开始)

while True:
    # 发送分页请求
    url = f'https://APIURL/api/stats/allinteractions?d=20190101,{dt_str}&n={n}'
    response = requests.get(url, auth=('user', 'pass'))
    # 确保请求成功,避免无效数据混入
    response.raise_for_status()
    
    # 解析当前分页的XML
    page_root = et.fromstring(response.content)
    # 获取当前页的<interaction>节点数量
    interaction_count = len(page_root.findall('interaction'))
    
    # 将当前页的所有<interaction>节点追加到主根节点
    for interaction in page_root.findall('interaction'):
        main_root.append(interaction)
    
    # 判断是否继续循环:如果当前页返回了50条(API每页上限),则继续请求下一页
    if interaction_count < 50:
        break
    n += 50

# 生成完整的XML字符串(可选:保存到文件或进一步处理)
full_xml = et.tostring(main_root, encoding='utf-8', xml_declaration=True)
# 如果需要格式化输出,可以使用第三方库优化格式
# import xml.dom.minidom
# dom = xml.dom.minidom.parseString(full_xml)
# pretty_xml = dom.toprettyxml(indent='  ')
# print(pretty_xml)

关键细节说明

  • 分页偏移量适配:我假设API的n参数是起始偏移量(比如n=0返回前50条,n=50返回第51-100条),如果你的APIn参数是页码,需要调整初始值和递增逻辑。
  • 异常防护:添加了response.raise_for_status(),确保请求失败时直接抛出异常,避免无效的空数据或错误数据被合并。
  • 节点合并逻辑:通过page_root.findall('interaction')精准提取当前页的交互节点,再用main_root.append()将它们挂载到主根节点下,最终形成一个结构完整的连续XML文档。
  • 循环终止条件:当某一页返回的<interaction>数量小于50时,说明已经获取到最后一页数据,直接终止循环即可。

内容的提问来源于stack exchange,提问作者Jamm6

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:27:41