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

如何用xml.etree.ElementTree提取XML指定元素值并写入DataFrame

处理带命名空间的XML提取CtrlSum到DataFrame

当XML包含命名空间时,xml.etree.ElementTree要求必须显式指定命名空间才能正确定位元素,直接用标签名查询会因为命名空间前缀缺失返回空结果。以下是解决步骤:

  • 提取或定义命名空间映射
    从根元素的xmlns属性获取命名空间,或者手动指定(如果已知):

    import xml.etree.ElementTree as ET
    import pandas as pd
    
    # 解析XML文件
    tree = ET.parse('your_xml_file.xml')
    root = tree.getroot()
    
    # 提取命名空间(假设根元素只有一个xmlns属性)
    ns = {'ns': root.attrib['xmlns']}
    # 如果知道命名空间URL,也可以直接写:ns = {'ns': 'http://your-namespace-url'}
    
  • 使用命名空间查询目标元素
    在findall方法中传入命名空间映射,用ns:标签名的形式定位元素:

    # 查询所有层级下的CtrlSum元素
    ctrl_sum_elements = root.findall('.//ns:CtrlSum', namespaces=ns)
    
  • 提取值并生成DataFrame
    遍历查询到的元素,提取文本值后转为DataFrame:

    ctrl_sum_values = [elem.text for elem in ctrl_sum_elements]
    df = pd.DataFrame({'CtrlSum': ctrl_sum_values})
    

关键说明

之前你用root.findall(".//GrpHdr")返回空,是因为带命名空间的元素实际标签名是{命名空间URL}GrpHdr,而非单纯的GrpHdr。通过命名空间映射,ElementTree会自动将ns:GrpHdr解析为完整的带命名空间标签名,从而正确匹配元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:05:24