python_xml文件的解析与构建

本文介绍了如何使用Python内置的xml.etree.ElementTree模块来解析XML文档,通过parse函数获取XML内容。此外,还提到了官方文档中关于查找节点元素的方法。另外,文章也讨论了如何构建XML文档,利用ElementTree和Element类来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:https://docs.python.org/3/library/xml.etree.elementtree.html#module-xml.etree.ElementTree

解析xml文档:将xml文档解析,获取文档中的内容
采用xml.tree.ElementTree模块的parse函数

from xml.etree.ElementTree import parse
path = r'E:\settings.xml'
f = open(path)
tree= parse(path)       #创建一个xml对象
root = tree.getroot()   #获得结构树根节点
print('输出根节点的标签:%s'%root.tag) #.tag获取标签值
print('输出根节点的属性:%s'%root.attrib)  #.attrib获取属性值
#获取root下的子节点
for child in root:
    print('子节点标签:%s,子节点属性%s:'%(child.tag,child.attrib))#只能找出root下的第一级子节点

print('root下第一个子节点下的第二个子节点的内容%s:'%root[0][1].text)
print('输出所以结点内容%s:'%list(root.iter()))
print('输出所有节点为neighbor的节点%s:'%list(root.iter('neighbor')))
#root.iter('neighbor')可进行迭代,获取其属性、标签等内容
for x in root.iter('neighbor'):
    print('子节点neighbor的属性%s'%x.attrib)
#find,findall方法
for country in root.findall('country'):
    rank = country.find('rank').text
    name = country.get('name')
    print(rank,name)
#set方法,设置属性
for rank in root.iter('rank'):
    newrank = int(rank.text)+1
    rank.text = str(newrank)
    rank.set('updated','yes') 
tree.write(path)
print('update success')

print('neighbor节点direction属性等于w的节点%s'%root.findall('.//neighbor[@direction="W"]'))#采用[@attrib]

官方文档中还提及到一些查找节点元素的方法如下:

import xml.etree.ElementTree as ET

root = ET.fromstring(countrydata)

# Top-level elements
root.findall(".")

# All 'neighbor' grand-children of 'country' children of the top-level
# elements
root.findall("./country/neighbor")

# Nodes with name='Singapore' that have a 'year' child
root.findall(".//year/..[@name='Singapore']")

# 'year' nodes that are children of nodes with name='Singapore'
root.findall(".//*[@name='Singapore']/year")

# All 'neighbor' nodes that are the second child of their parent
root.findall(".//neighbor[2]")

构建xml文档:将某些文件用xml格式文件表示。使用xml.etree.ElementTree模块的ElementTree,Element

import csv
from xml.etree.ElementTree import ElementTree,Element

def pretty(e,level=0):
    if len(e)>0:
        e.text = '\n'+'\t'*(level+1)
        for child in e:
            pretty(child,level+1)
        child.tail = child.tail[:-1]
    e.tail='\n'+'\t'*level
#将一个csv文件,构建为xml文档
def csvToXml(csv_file):
    with open(csv_file,'r') as f:
        reader = csv.reader(f) #创建一个csv读取对象
        header = next(reader)#获取第一行列名字段
        print(header)

        root = Element('Data')#创建根节点
        for row in reader:
            eRow = Element('Row')#创建第一层子节点
            root.append(eRow)#将eRow子节点加到root节点下
            for tag,text in zip(header,row):
                eCont = Element(tag)#创建第二层子节点元素
                eCont.text = text
                eRow.append(eCont)
    pretty(root)#pretty方法用于美化构建的xml文件
    return ElementTree(root)
#将xml格式内容写入文件                
path = r'E:\xxx.csv'
et=csvToXml(path)
xml_path = r'E:\xxx.xml'
et.write(xml_path,encoding='utf-8')#采用write方法将xml写入文件
#添加encoding='utf-8'使中文字符正常显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值