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

Python 3.6中为XML嵌套元素生成对应父节点KEY的实现方法

如何为XML转换后的DataFrame添加父节点信息?

我来帮你解决这个给XML元素添加父节点关联信息的问题!你已经完成了从API获取XML并转换为DataFrame的基础工作,现在只需要补充层级关系的跟踪逻辑就可以了。

问题核心分析

你当前的代码只是把所有XML元素的属性平铺收集到列表中,但没有记录元素之间的父子层级关系。要实现需求,我们需要在遍历XML节点时主动跟踪当前节点的父节点KEY,并将这个信息注入到每个元素的属性字典里。

修改后的完整代码

我调整了你的代码,加入了递归遍历逻辑来精准跟踪父节点:

import requests
import xml.etree.ElementTree as ET
import pandas as pd

Dimension_Id = 'OBJ5263019'
Language = '1033'
Request_URL = 'http://dataportal.ins.tn/WebApi/GetDimensionElements'
# 修正了原代码中转义字符的问题,直接使用XML标签格式
Method_Post_Body = "<QueryMessage lcid='" + Language + "'> <DataWhere> <DimensionId>" + Dimension_Id + "</DimensionId> </DataWhere> </QueryMessage>"
Post_Response = requests.post(Request_URL, data=Method_Post_Body, headers={'Content-type': 'text/xml'})
XTree = Post_Response.content
XRoot = ET.XML(XTree)

XML_List = []

def traverse_xml(node, parent_key=""):
    """递归遍历XML节点,同步记录每个节点的父KEY"""
    # 仅处理带有KEY属性的Element节点(匹配你的需求描述)
    if 'KEY' in node.attrib:
        # 复制当前节点属性字典,新增Parent字段
        element_data = node.attrib.copy()
        element_data['Parent'] = parent_key
        XML_List.append(element_data)
    
    # 递归遍历所有子节点,将当前节点的KEY作为子节点的父KEY传递
    for child_node in node:
        traverse_xml(child_node, parent_key=node.attrib.get('KEY', ""))

# 从你原代码指定的XRoot[1]节点开始遍历
traverse_xml(XRoot[1])

# 生成带父节点信息的最终DataFrame
XML_Dimension_Items = pd.DataFrame(XML_List)

关键逻辑说明

  1. 递归遍历函数traverse_xml:
    • 接收两个参数:当前遍历的XML节点,以及该节点的父节点KEY(默认空字符串,对应顶级节点)
    • 先检查当前节点是否包含KEY属性,符合条件就复制属性字典并添加Parent字段后存入列表
    • 再递归遍历所有子节点,把当前节点的KEY作为子节点的父KEY传递下去
  2. 启动遍历:和你原代码保持一致,从XRoot[1]开始,确保数据源范围完全匹配
  3. 最终效果:生成的DataFrame会新增Parent列,顶级元素的Parent为空字符串,子元素的Parent严格对应其父节点的KEY值

验证方式

你可以通过print(XML_Dimension_Items[['KEY', 'Parent']].head(10))快速查看结果,确认父子节点的关联关系是否符合预期。

内容的提问来源于stack exchange,提问作者question.it

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:24:25