0

0

Python ElementTree:将XML标签属性提取为字典列表

霞舞

霞舞

发布时间:2025-10-11 13:14:01

|

207人浏览过

|

来源于php中文网

原创

Python ElementTree:将XML标签属性提取为字典列表

本教程详细介绍了如何使用python的`xml.etree.elementtree`模块,从xml文件中解析特定标签的属性,并将其高效地收集到一个python字典列表中。通过初始化空列表并在循环中追加每个元素的`attrib`字典,可以轻松实现结构化数据提取,方便后续数据处理和分析。

引言:XML属性提取的需求

XML(可扩展标记语言)作为一种广泛使用的数据交换和存储格式,其结构化特性使其在多种应用场景中扮演着重要角色。在处理XML数据时,一个常见的任务是提取特定标签的属性信息。例如,我们可能需要从一系列 标签中,将每个字段的所有属性(如DATATYPE、FIELDNUMBER等)作为独立的字典,并最终将这些字典收集到一个Python列表中,以便于后续的数据处理、分析或存储。

核心工具:xml.etree.ElementTree模块

Python标准库中的 xml.etree.ElementTree 模块提供了一个轻量级且高效的API,用于解析和操作XML文档。它将XML文档表示为一个树形结构,其中每个标签都被视为一个“元素”(Element),其属性则存储在元素的 attrib 字典中。

实现步骤:将XML属性收集到列表

要将XML文件中特定标签的属性提取并存储为一个字典列表,主要步骤如下:

  1. 导入模块与解析XML文件:首先需要导入 xml.etree.ElementTree 模块,并使用 ET.parse() 方法解析XML文件,获取XML树的根元素。
  2. 初始化结果列表:在开始遍历XML元素之前,创建一个空的Python列表。这个列表将用于存储所有提取到的属性字典。这是关键一步,确保列表在循环外部定义,以便所有属性字典都能被追加到同一个列表中。
  3. 遍历元素并提取属性:使用 root.iter('TAG_NAME') 方法遍历XML文档中所有指定名称的标签。对于每个找到的元素,其属性可以通过 element.attrib 访问,这是一个包含所有属性名-值对的字典。然后,将这个属性字典追加到之前初始化的结果列表中。

下面是根据上述步骤实现的完整示例代码:

摄图AI
摄图AI

摄图网旗下AI视觉创作平台

下载

立即学习Python免费学习笔记(深入)”;

import xml.etree.ElementTree as ET
import os

# 定义XML文件路径
# 请将此路径替换为您的实际XML文件路径
xml_file_path = 'C:\Users\dd00849401\Desktop\xml\m_DM_DIM_NRC_CUSTOMER.xml'

# 检查文件是否存在
if not os.path.exists(xml_file_path):
    print(f"错误:文件 '{xml_file_path}' 不存在。")
    exit()

try:
    # 解析XML文件
    tree = ET.parse(xml_file_path)
    root = tree.getroot()
    print("XML文件解析成功。")
except ET.ParseError as e:
    print(f"错误:XML文件解析失败。请检查文件格式是否正确。详细信息:{e}")
    exit()
except Exception as e:
    print(f"发生未知错误:{e}")
    exit()

# 初始化一个空列表,用于存储所有SOURCEFIELD的属性字典
sourcefields_attributes = []

print("
*********** 源数据详情 ***********")
# 遍历所有的'SOURCE'标签
for source in root.iter('SOURCE'):
    sourcename = source.attrib.get('NAME', 'N/A') # 使用.get()方法获取属性,避免KeyError
    print(f"
源名称: {sourcename}")
    print(f"*********** 源 '{sourcename}' 的详细信息: ***********")
    print(source.attrib)
    print(f"*********** 源 '{sourcename}' 的列名信息: ***********")

    # 在每个'SOURCE'标签内部,遍历所有的'SOURCEFIELD'标签
    for sourcefields in source.iter("SOURCEFIELD"):
        # 打印当前SOURCEFIELD的属性字典
        print(sourcefields.attrib)
        # 将当前SOURCEFIELD的属性字典追加到列表中
        sourcefields_attributes.append(sourcefields.attrib)

# 打印最终收集到的所有SOURCEFIELD属性的列表
print("
*********** 最终收集到的SOURCEFIELD属性列表 ***********")
print(sourcefields_attributes)

代码解析与输出

上述代码首先导入了必要的模块并指定了XML文件路径。它包含了基本的错误处理,以确保文件存在且XML格式正确。

  1. sourcefields_attributes = []:在所有循环外部,我们初始化了一个名为 sourcefields_attributes 的空列表。这个列表将作为最终结果的容器。
  2. for source in root.iter('SOURCE')::这个循环用于遍历XML文档中所有的 标签。
  3. for sourcefields in source.iter("SOURCEFIELD")::这是一个嵌套循环,对于每个 标签,它会继续遍历其内部所有的 标签。
  4. sourcefields_attributes.append(sourcefields.attrib):这是核心操作。sourcefields.attrib 会返回当前 元素的所有属性,以字典的形式表示(例如 {'BUSINESSNAME': '', 'DATATYPE': 'varchar', ...})。append() 方法将这个字典添加到 sourcefields_attributes 列表中。

执行上述代码后,您将获得如下格式的输出(具体内容取决于您的XML文件):

XML文件解析成功。

*********** 源数据详情 ***********

源名称: SOME_SOURCE_NAME
*********** 源 'SOME_SOURCE_NAME' 的详细信息: ***********
{'NAME': 'SOME_SOURCE_NAME', 'TYPE': 'Flat File'}
*********** 源 'SOME_SOURCE_NAME' 的列名信息: ***********
{'BUSINESSNAME': '', 'DATATYPE': 'varchar', 'DESCRIPTION': '', 'FIELDNUMBER': '1'}
{'BUSINESSNAME': '', 'DATATYPE': 'numeric', 'DESCRIPTION': '', 'FIELDNUMBER': '2'}
{'BUSINESSNAME': '', 'DATATYPE': 'timestamp', 'DESCRIPTION': '', 'FIELDNUMBER': '3'}

*********** 最终收集到的SOURCEFIELD属性列表 ***********
[{'BUSINESSNAME': '', 'DATATYPE': 'varchar', 'DESCRIPTION': '', 'FIELDNUMBER': '1'},
 {'BUSINESSNAME': '', 'DATATYPE': 'numeric', 'DESCRIPTION': '', 'FIELDNUMBER': '2'},
 {'BUSINESSNAME': '', 'DATATYPE': 'timestamp', 'DESCRIPTION': '', 'FIELDNUMBER': '3'}]

注意事项与最佳实践

  • 文件路径: 确保XML文件的路径是正确的。在生产环境中,通常建议使用绝对路径或基于脚本位置的相对路径。
  • 错误处理: 示例代码中增加了对文件是否存在和XML解析错误的 try-except 块。这在处理外部文件时是必不可少的,可以防止程序因文件问题而崩溃。
  • 属性访问: 当访问元素的属性时,如果属性可能不存在,建议使用 element.attrib.get('attribute_name', default_value) 而不是直接 element.attrib['attribute_name']。get() 方法允许您提供一个默认值,以避免在属性不存在时引发 KeyError。
  • XML结构变化: 如果XML文档的结构发生变化,您可能需要调整 iter() 方法中的标签名或遍历逻辑。
  • 内存使用: 对于非常大的XML文件,ET.parse() 会将整个文件加载到内存中。如果内存成为问题,可以考虑使用 ET.iterparse() 进行增量解析,但这会增加代码的复杂性。

总结

通过 xml.etree.ElementTree 模块,我们可以高效地解析XML文档,并利用简单的列表追加操作,将特定标签的所有属性提取并组织成一个字典列表。这种方法不仅代码简洁,而且能够将XML的结构化数据转换为Python中易于操作的数据结构,为后续的数据处理和分析奠定了基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1942

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2117

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1157

2024.11.28

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

548

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

27

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

44

2026.01.06

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

348

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1080

2023.11.14

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

1

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号