Python ElementTree库XML解析与生成完整指南

橘子海
橘子海
发布时间:2026-10-12 | 2人浏览过
原创

本文详解Python中ElementTree库的使用,涵盖从引入Element、ElementTree及SubElement类开始,演示如何读取XML文件并获取根节点。内容包含查找子节点、插入新节点(两种方法对比)、操作属性以及使用indent函数美化XML输出的完整代码示例,帮助开发者高效处理XML数据。

1.引入库

主要涉及三个核心类:ElementTree用于管理整个文档,Element代表单个节点,以及SubElement作为创建子节点的便捷包装类。

from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement as SE

2.读入并解析

tree = ElementTree(file=xmlfile)
root = tree.getroot()

加载XML文件后,返回的对象类型为ElementTree。要访问XML的根节点,需调用getroot()方法。

XML示例文件:

<item sid='1712' name='大CC'  >
<a id=1></a>
<a id=2></a>
</item>

3.获取子结点

查找Element的所有子结点:

AArry = item.findall('a')

也可使用getchildren():

childs =  item.getchildren()
     for subItem in childs:
           print subItem.get('id')

4.插入子结点

方法一:

item = Element("item", {'sid' : '1713', 'name' : 'ityouhui'})
root.append(item)

方法二:

SE(root,'item',{'sid':'1713','name':'ityouhui'})

方法一的优势在于插入节点后,可以直接对该item对象进行后续操作。方法二在语法上更为简洁,其中SE即为SubElement的别名,已在引入部分声明。

5.操作属性

获取Element的某个属性值(eg:获取item的 name)

print root.find('item/name').text
print item.get('name')

获取Element所有属性

print item.items()       # [('sid', '1712'), ('name', '大CC')]
print item.attrib        # {'sid': '1712', 'name': '大CC'}

6.美化XML

在写入文件之前,对root调用此函数,可使输出的XML文件格式整齐美观:

indent(root)
book.write(xmlfile,'utf-8')
## Get pretty look
def indent( elem, level=0):
    i = "\n" + level*"  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        for e in elem:
            indent(e, level+1)
        if not e.tail or not e.tail.strip():
            e.tail = i
    if level and (not elem.tail or not elem.tail.strip()):
        elem.tail = i
    return elem

到此这篇关于python通过ElementTree操作XML的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表