You need to enable JavaScript to run this app. xmltodict解析XML生成OrderedDict后实现同层级字段扁平化拼接适配DynamoDB
优惠活动
大模型
产品
解决方案
定价
更多

xmltodict解析XML生成OrderedDict后实现同层级字段扁平化拼接适配DynamoDB

实现方案与问题修正

现有代码的核心逻辑错误

  • 对metadata_part执行原地update操作会直接修改原始的元数据字典,无法生成独立的合并结果
  • 遍历parts_part时定位层级错误:拿到的键是字符串'part',对应的值是所有part组成的列表,没有下钻到单个part的字典层级
  • 没有处理xmltodict的解析边界:当XML中只有1个part节点时,xmltodict不会将其解析为列表,会直接返回单个OrderedDict,原逻辑遇到这类场景会直接报错
  • 传入update方法的参数是一个元组而非字典结构,根本无法完成键值对合并

可直接运行的修正代码

import xmltodict
import boto3

# 读取并解析XML
with open('dummy.xml', 'r') as f:
    fullFile = xmltodict.parse(f.read())

# 提取固定的metadata部分,做浅拷贝避免污染原始解析结果
metadata = fullFile["part_report"]["metadata"].copy()

# 提取所有part节点,兼容单part的边界情况
parts_container = fullFile["part_report"]["parts"]["part"]
if not isinstance(parts_container, list):
    parts_list = [parts_container]
else:
    parts_list = parts_container

# 生成扁平化的合并结果
flattened_records = []
for single_part in parts_list:
    # 生成全新的字典对象,不修改原始结构
    merged_record = {
        **metadata,
        **single_part
    }
    flattened_records.append(merged_record)

# 后续可直接将flattened_records写入DynamoDB,结构完全匹配写入要求

合并后的结果示例

最终生成的flattened_records结构如下,每个条目都是完全扁平化的键值对,没有嵌套层级:

[
    {
        "data1": "apple",
        "data2": "car",
        "data3": "date",
        "data4": "people",
        "data5": "cats",
        "data6": "244234"
    },
    {
        "data1": "apple",
        "data2": "car",
        "data3": "date",
        "data4": "children",
        "data5": "dogs",
        "data6": "342342"
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 23:45:04