博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python xml模块学习
阅读量:4635 次
发布时间:2019-06-09

本文共 3729 字,大约阅读时间需要 12 分钟。

xml打开方式

# xml有两种打开方式# 1. 打开文件,读取XML内容str_xml = open('xman.xml', 'r').read()print(str_xml)# 将字符串解析成xml特殊对象,root代指xml文件的根节点root = ET.XML(str_xml)    # 读取字符串,将字符串转为Element对象print(root)# 2. 直接解析xml文件tree = ET.parse("xman.xml")  # 直接从xml文件解析封装一个ElementTree对象print(tree)# 以上一个是读取字符串,转换为Element对象,另一个是转换为ElementTree对象,这两个对象具体不同,请参考操作xml部分

获取XML标签

# 例如我现在有一个xml文件    
2
2023
141100
5
2026
59900
69
2026
13600
# 获取xml文件的根节点root1 = tree.getroot()  # 获取根节点,同样这里root1为Element对象print(root1)# 获取标签名s = root.tag  print(s)==> data # 仅仅只会获取最顶层的标签名# 所以,我们可以迭代获取子标签名# 这里清楚概念,root是一个Element对象,它迭代的每一个都是Element对象# 是可以使用同样的tag等方法的for i in root:  # 可迭代的方式获取子标签名    print(i.tag) # 获取下一级的标签名==>countrycountrycountry# 获取标签属性s = root.attrib  # 获取标签属性print(s)==>{
'test': 'xxx'}for i in root: # 可迭代的方式获取子标签名 print(i.attrib) # 获取下一级的标签属性==>{
'name': 'Liechtenstein'}{
'name': 'Singapore'}{
'name': 'Panama'}# 获取标签内容s = root.text # 获取标签内容print(s) ==> # 空,一级标签下包含的其它标签不算是内容for i in root: # 可迭代的方式获取子标签名 for j in i: print(j.text) # 获取下一级的标签内容

操作XML并写入文件

# 开头我们说了,有两种打开方式打开xml这里我们就分别用两种方式,再次演示,具体Element与ElementTree对象不同############ 解析方式一 ############# 读取字符串# 打开文件,读取XML内容str_xml = open('xman.xml', 'r').read()# 将字符串解析成xml特殊对象,root代指xml文件的根节点root = ET.XML(str_xml)   # 读入字符串############ 操作 ############# 顶级标签print(root.tag)# 循环所有的year节点# iter方法:在当前节点的子孙中,根据节点名称寻找所有指定的节点,并返回一个迭代器(可以被for循环)for node in root.iter('year'):    # 将year节点中的内容自增1    new_year = int(node.text) + 1    node.text = str(new_year)    # 设置属性(没有添加,有修改)    node.set('name', 'alex')    node.set('age', '18')    # 删除属性    del node.attrib['name']  # 删除name属性############ 保存文件 ############tree = ET.ElementTree(root)tree.write("xml_t2.xml", encoding='utf-8')
############ 解析方式二 ############# 直接解析xml文件tree = ET.parse("xman.xml")# 获取xml文件的根节点root = tree.getroot()   # 这里会生成一个ElementTree对象############ 操作 ############# 顶层标签print(root.tag)# 循环所有的year节点for node in root.iter('year'):    # 将year节点中的内容自增一    new_year = int(node.text) + 1    node.text = str(new_year)    # 设置属性    node.set('name', 'alex')    node.set('age', '18')    # 删除属性    del node.attrib['name']############ 保存文件 ############tree.write("xml_t2.xml", encoding='utf-8')

创建XML文件

# 创建xml文档# 创建根节点root = ET.Element('famliy')# 创建节点大儿子 #son1 = ET.Element('son', {
'name':'儿1'})# son1 = root.makeelement('son', {'name': '儿1'}) # 方法二# son1 = ET.SubElement(root, "son", attrib={'name': '儿1'}) # 方法三# 创建节点小儿子 #son2 = ET.Element('son', {
'name':'儿2'})# son2 = root.makeelement('son', {"name": '儿2'}) # 方法二# son2 = ET.SubElement(root, "son", attrib={"name": "儿2"}) # 方法三# 在大儿子中创建两个孙子 #grandson1 = ET.Element('grandson', {
'name': '儿11'})# grandson1 = son1.makeelement('grandson', {'name': '儿11'}) # 方法二grandson2 = ET.Element('grandson', {
'name': '儿12'})# grandson2 = son1.makeelement('grandson', {'name': '儿12'}) # 方法二# 方法三# grandson1 = ET.SubElement(son1, "age", attrib={'name': '儿11'})# grandson1.text = '孙子' # 可以操作标签内容# 将以上穿件孙子添加到儿子son1.append(grandson1)son2.append(grandson2)# 把儿子添加到根节点中root.append(son1)root.append(son2)# 生成写入一个xmltree = ET.ElementTree(root)tree.write('xml_t3.xml',encoding='utf-8',xml_declaration=True ,short_empty_elements=False)# xml_declaration 设置为
xml注释# short_empty_elements 自闭和的一个参数,如果便签没有text,则 自闭和 没有

 

转载于:https://www.cnblogs.com/coolking/p/5612442.html

你可能感兴趣的文章
函数指针&绑定: boost::functoin/std::function/bind
查看>>
js实现双击后网页自己主动跑-------Day55
查看>>
TMS320F28335项目开发记录2_CCS与JTAG仿真器连接问题汇总
查看>>
PS多形式的部分之间复制“笨办法”
查看>>
最强的篮球队和马尔可夫模型
查看>>
hdu-4302-Holedox Eating-线段树-单点更新,有策略的单点查询
查看>>
cocos2d-x 音效中断问题
查看>>
设计模式简要笔记
查看>>
子分类账知识学习(汇总网上比较有用的资料)
查看>>
关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题...
查看>>
pyQt 每日一练习 -- 登录框
查看>>
wp 删除独立存储空间文件(多级非空文件夹删除)
查看>>
Loadrunner安装使用入门
查看>>
smartupload 上传文件时 把页面编码改成gbk 解决乱码
查看>>
EPS是什么格式
查看>>
新闻网大数据实时分析可视化系统项目——5、Hadoop2.X HA架构与部署
查看>>
【原创】Linux环境下的图形系统和AMD R600显卡编程(11)——R600指令集
查看>>
input禁止显示历史输入记录
查看>>
本日进度6
查看>>
两下或多下回车造成数据库多次提交事物的解决方法
查看>>