Python基础知识值XML

一、XML内容

<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2023</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2026</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year>2026</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data>

1.解析 XML

from xml.etree import ElementTree as ET

#打开XML,读取XML的内容

str_xml = open("fisrt1.xml",'r').read()

#将字符串解析成XML对象

root = ET.XML(str_xml)

2.直接解析XML文档
#直接解析XML文件
str_xml = ET.parse("fisrt1.xml")

#获取XML文件的根节点
root = str_xml.getroot()


2.操作XML文件

a.遍历XML文档中的所有内容

from xml.etree import ElementTree as ET

#直接解析XML文件
str_xml = ET.parse("fisrt1.xml")

#获取XML文件的根节点
root = str_xml.getroot()

#顶层标签

print(root.tag)

#遍历XML文件的第二层标签
for child in root:
print(child.tag, child.attrib)

#遍历XML文件的第三层标签
for sub_child in child:
print(sub_child.tag, sub_child.text)


b.遍历XML文件中指点的节点

from xml.etree import ElementTree as ET

#打开XML,读取XML的内容

#直接解析XML文件
str_xml = ET.parse("fisrt1.xml")

#获取XML文件的根节点
root = str_xml.getroot()

#顶层标签

print(root.tag)

for node in root.iter("year"):
print(node.tag, node.text)


for node in root.iter("gdppc"):
print(node.tag, node.text)


C.修改节点的内容
由于修改节点内容时,均是在内存中进行,不会对文件的内容造成影响。如果要修改文件的内容成功,则需要将内存修改的结果保存到文件中

from xml.etree import ElementTree as ET

#直接解析XML文件
str_xml = ET.parse("fisrt1.xml")

#获取XML文件的根节点
root = str_xml.getroot()

#顶层标签
print(root.tag)

#修改节点的内容
for node in root.iter("year"):

#将节点的内容自加1
new_year = int(node.text) + 1
node.text = str(new_year)

#设置节点
node.set('name', 'hjw')
node.set('age','18')

# 保存修改的文件
tree = ET.ElementTree(root)
tree.write('aa.xml', encoding = 'utf-8')

d.删除节点

from xml.etree import ElementTree as ET

#直接解析XML文件
str_xml = ET.parse("fisrt1.xml")

#获取XML文件的根节点
root = str_xml.getroot()

#顶层标签
print(root.tag)

#遍历data下的country下节点
for country in root.findall('country'):
#获取每个rank节点的内容
rank = int(country.find('rank').text)

if rank > 50:
#删除指定的country节点
root.remove(country)

#保存修改后的内容
tree = ET.ElementTree(root)
tree.write('bb.xml', encoding='utf-8')


3.创建XML
from xml.etree import ElementTree as ET

#创建根节点

root = ET.Element('famliy')

#创建节点大儿子
son1 = ET.Element('son', {'name' : '儿1'})
#创建节点小儿子
son2 = ET.Element('son', {'name' : '儿2'})

#在大儿子中创建孙子节点
grandson1 = ET.Element('grandson', {'name' : '儿11'})
grandson2 = ET.Element("grandson", {'name' : '儿12'})

#把孙子添加到儿1中
son1.append(grandson1)
son1.append(grandson2)

#把儿子添加中根节点中
root.append(son1)
root.append(son2)

#b保存文件
tree = ET.ElementTree(root)
tree.write('new_son1.xml', encoding = 'utf-8')

4.创建带有格式化的XML

from xml.etree import ElementTree as ET
from xml.dom import minidom

def prettify(elem):
#将节点转换成字符串,并添加缩进

rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent="\t")

#创建根节点
root = ET.Element("famliy")

#创建大儿子
son1 = root.makeelement('son', {'name' : '儿1'})

#创建小儿子

son2 = root.makeelement('son', {'name' : '儿2'})

#在大儿子中创建两个孙子
grandson1 = son1.makeelement('grandson', {'name':'儿11'})

grandson2 = son1.makeelement('grandson', {'name' : '儿12'})

son1.append(grandson1)
son1.append(grandson2)

#把儿子添加到根节点
root.append(son1)
root.append(son2)

raw_str = prettify(root)
f1 = open('ff.xml', 'w', encoding = 'utf-8')
f1.write(raw_str)
f1.close()













posted @ 2017-09-17 10:21  hjw457  阅读(193)  评论(0)    收藏  举报