您的位置:首页 > 编程语言 > Python开发

python_xml文件的解析与构建

2017-10-25 22:16 381 查看
官方文档: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'使中文字符正常显示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python xml