Python模块知识7:XML

XML是实现不同语言或程序之间进行数据交换的协议;

通常浏览器返回的字符串有三种格式:

1、HTML

2、Json

3、XML

其中,XML可以在页面上做展示,可以作为程序的配置文件(获取字符串类型的XML格式数据)

xml的特点:以开始和结尾,包含根节点、子节点;

每一个节点都是element对象,节点下可以嵌套节点,element对象下可以获得各个方法。比如:tag(节点名称)、attib(属性)、text(内容)、makeelement(创建一个新节点)、append(追加一个子节点)等

如下所示的xml文件:

案例1:找根节点:

fromxml.etreeimportElementTreeasET

tree=ET.parse('hh.xml')

root=tree.getroot()#获取xml的根节点

print('根节点',root)#但因根节点,类型均为element;

print('根节点的名称',root.tag)#获取根节点名字,

print('根节点的属性',root.attrib)#获取根节点名字,

效果:

案例2:找二级、三级等节点

fromxml.etreeimportElementTreeasET

tree=ET.parse('hh.xml')

root=tree.getroot()#获取xml的根节点

foriinroot:

print('二级节点名称',i.tag,'二级节点属性',i.attrib)

forgradechildini:

print('3级节点名称:',gradechild.tag,'3级节点内容:',gradechild.text)

效果:

解析XML的两种方式:

1、解释字符串,无ElementTree,自己打开文件拿到,或者发送request模块拿到返回值

将字符串解析为xml

fromxml.etreeimportElementTreeasET

# 打开文件,读取XML内容

str_xml =open('xo.xml','r').read()

# 将字符串解析成xml特殊对象,root代指xml文件的根节点

root = ET.XML(str_xml)

2、解析文件,会有用ElementTree,两个步骤拿到Element,将文件解析为xml;ElementTree可以写入东西

fromxml.etreeimportElementTreeasET

# 直接解析xml文件

tree = ET.parse("xo.xml")

# 获取xml文件的根节点

root = tree.getroot()

案例3:修改xml,用字符方式读取的;

#以字符串导入

fromxml.etreeimportElementTreeasET

str_xml=open('hh.xml','r').read()

root=ET.XML(str_xml)

print(root.tag)#拿到所以的根节点

#循环所有的year节点

foriinroot.iter('year'):

#将year内容自增1

new_year=int(i.text)+1

i.text=str(new_year)

#设置属性

i.set('name',"hx")

i.set('age','18')

#删除属性

# del i.attrib['name']

#操作完了,需要保存,要用到ElementTree

tree=ET.ElementTree(root)

tree.write('hhnew',encoding='utf-8')#如果用文件方式解析,则可以直接用此句

执行结果:新增一个文件hhnew,内容如下:已修改所有内容

案例4:在Element基础上新增一个节点,可以写上内容

#在element的基础上新增一个节点,并写入内容

fromxml.etreeimportElementTreeasET

tree=ET.parse('hh.xml')

root=tree.getroot()

ele=ET.Element("hh",{'k1':'b1'})#创建element对象

ele.text="写入新的内容"

root.append(ele)#append

tree.write('hh_new2',encoding='utf-8')#写入新的文件

执行结果:会新增如下一句话

案例5:创建一个XML

#创建一个新的xml

fromxml.etreeimportElementTreeasET

fromxml.domimportminidom

defprettify(ele):#将所有的节点转换成字符串,并添加缩进

rough_string=ET.tostring(ele,'utf-8')

str=minidom.parseString(rough_string)

returnstr.toprettyxml(indent="\t")#添加缩进

#创建根节点

root=ET.Element('famliy')

#创建节点的大儿子

son1=ET.Element('son',{'name':'儿子1'})

#创建节点的小儿子

son2=ET.Element('son',{'name':'儿子2'})

#在大儿子下创建两个孙子

grandson1=ET.Element('grandson',{'name':'儿子1孙子1'})

grandson1.text='孙子1的节点内容'

grandson2=ET.Element('grandson',{'name':'儿子1孙子2'})

grandson2.text='孙子2的节点内容'

#把孙节点更新到儿节点

son1.append(grandson1)

son1.append(grandson2)

#把儿节点更新到根节点

root.append(son1)

root.append(son2)

raw_str=prettify(root)#缩进

#用打开文件方式写入

f=open('hhnew3','w',encoding='utf-8')

f.write(raw_str)

f.close()

执行结果:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180101G0B0B200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动