最近有同学询问如何利用Python处理xml文件,特此整理一个比较简洁的操作手册,供大家参阅。
准备一个xml文件,xml中的内容如下所示,存储为:student.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- sno是属性,定义在元素内 -->
<students no="2">
<student sno="1901">
<name>江韬</name>
<age>31</age>
<gender>男</gender>
<mobilephone>13517315144</mobilephone>
</student>
<student sno="1902">
<name>华华</name>
<age>31</age>
<gender>女</gender>
<mobilephone>18688773499</mobilephone>
</student>
</students>
如果要获取这个xml里面的数据,我们需要利用Python里面ElementTree来进行处理,具体操作如下所示:
1:导入包(包是Python内置自带)
import xml.etree.ElementTree as ET
2:打开文件,并获取根节点的属性和节点名称
#打开xml文件
#如下两行代码后期可以重复使用哦·后面操作就不再重复书写
tree=ET.parse("student.xml")
root=tree.getroot()#获取根节点
print(root.tag)#打印根节点的值
print(root.attrib)#打印属性值
运行代码后,结果如下所示:
3:利用find方法获取子节点(缺点:只能根据提供的名称获取第一个子节点)
node=root.find("student")
print("节点名称:",node.tag)
print("节点属性值:",node.attrib)
运行结果如下所示:
4:利用findall方法获取所有子节点,返回的节点会存在一个列表里面
#利用findall根据提供给的节点名,查找所有同名的节点名
nodes=root.findall("student")
# 根据索引去取值
print("节点名称:",nodes[0].tag)
print("节点属性值:",nodes[0].attrib)
print("节点名称:",nodes[1].tag)
print("节点属性值:",nodes[1].attrib)
#利用遍历去获取节点的属性和名称
for node in nodes:
print("节点名称:",node.tag)
print("节点属性值:",node.attrib)
运行的结果如下所示:
5:利用findall方法获取所有三级子节点,返回的节点会存在一个列表里面
nodes=root.findall("student")
#利用遍历去获取节点的属性和名称
for node in nodes:
sub_node=node.findall("name")#查找name节点
for three_node in sub_node:
#获取三级节点name的tag 和 标签包含的值
print("{}:{}".format(three_node.tag,three_node.text))
运行结果如下所示:
6:利用遍历的方法去直接遍历子节点里面的所有元素
for node in root:#遍历二级节点
print("二级节点{}的属性值{}:".format(node.tag,node.attrib))
print("三级节点的获取:")
for sub_node in node:#遍历三级节点
print("{}={},".format(sub_node.tag,sub_node.text),end="")
print("\n")
运行结果如下所示:
至此我们的xml的处理已经完全结束啦!
给大家留下一个练习题:
有一个xml的文件,内容如下,保存为:UILibrary.xml
<?xml version="1.0" encoding="UTF-8"?>
<pages>
<!-- page元素代表一个页面 -->
<page keyword="登录页面">
<uiElement keyword="手机号" by="id" value="mobilephone"></uiElement>
<uiElement keyword="密码" by="id" value="password"></uiElement>
<uiElement keyword="登录按钮" by="id" value="login"></uiElement>
<uiElement keyword="错误信息展示区" by="className" value="tips"></uiElement>
</page>
<page keyword="注册页面">
<uiElement keyword="手机号" by="id" value="mobilephone"></uiElement>
<uiElement keyword="密码" by="id" value="password"></uiElement>
<uiElement keyword="重复密码" by="id" value="pwdconfirm"></uiElement>
<uiElement keyword="验证码" by="id" value="verifycode"></uiElement>
<uiElement keyword="注册按钮" by="id" value="signup-button"></uiElement>
<uiElement keyword="错误信息展示区" by="className" value="tips"></uiElement>
</page>
<page keyword="首页">
<uiElement keyword="老师信息管理" by="id" value="menu-teacher"></uiElement>
<uiElement keyword="老师信息" by="partialLinkText" value="老师信息"></uiElement>
<uiElement keyword="老师列表iframe" by="xpath" value="//iframe[@src='teacher-list.html']"></uiElement>
</page>
<page keyword="老师列表页">
<uiElement keyword="添加老师按钮" by="partialLinkText" value="添加老师"></uiElement>
</page>
<page keyword="老师编辑页">
<uiElement keyword="昵称" by="id" value="nickname"></uiElement>
<uiElement keyword="手机号" by="id" value="mobilephone"></uiElement>
<uiElement keyword="qq" by="id" value="qq"></uiElement>
<uiElement keyword="性别" by="id" value="sex"></uiElement>
<uiElement keyword="地区" by="id" value="livingPlace"></uiElement>
<uiElement keyword="类别" by="id" value="type"></uiElement>
<uiElement keyword="保存按钮" by="id" value="save"></uiElement>
<uiElement keyword="老师编辑页iframe" by="xpath" value="//iframe[@src='./teacher-edit.html']"></uiElement>
</page>
</pages>
给大家留下一个练习题,针对上述xml文件,要求如下:
1:写一XmlUtil类,里面写一个函数:get_page,传递一个参数 file_path,实现元素的读取,返回列表形式的数据,并且列表里面存储每个page节点的信息;
2:写一个page类,有2个属性:page_key_word,存储页面信息;uiElement存储列表数据
3:写一个UiElement类,有1个属性:存储列表类型的数据,把每一个信息作为列表里面的一个数据
后期给大家揭晓答案哟!记得持续关注,或者找杰克辅导员!后面也会结合WEB自动化来给大家做进一步的分享
欢迎来到testingpai.com!
注册 关于