python操作XML格式文件

  • python操作XML格式文件
  • 1. 读取文件和内容
  • 2.读取节点数据
  • 3.修改和删除节点
  • 4.构建文档

python操作XML格式文件

可扩展标记语言,是一种简单的数据存储语言,XML被设计用来传输和存储数据

  • 存储,可用来存放配置文件,例:java配置文件
  • 传输,网络传输以这种格式存在,例:早期ajax传输数据等
<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. 读取文件和内容

#导包
from xml.etree import ElementTree as ET# ET去打开xml文件
tree = ET.parse("files/xo.xml")
# 获取根标签
root = tree.getroot()
print(root) # <Element 'data' at 0x7f94e02763b0>

2.读取节点数据

  • 获取根标签

    root = ET.XML(content)
    
  • 查找节点【默认找第一个】 find()

    country_object = root.find("country")
    print(country_object)  #<Element 'country' at 0x0000020D57DFB220>
    
  • 获取节点标签 tag

    country_object.tag  #country
    
  • 获取节点属性 attrib

    country_object.attrib   #{'name': 'Liechtenstein'}
    
  • 获取节点文本 text

    gdppc_object.text    #141100
    
  • 循环节点

    # 获取data标签的孩子标签
    for child in root:print(child.tag, child.attrib)#获取child标签的孩子标签for node in child:print(node.tag, node.attrib, node.text)
    
  • 查找所有标签 iter()

    # 获取data里面所有year标签
    for child in root.iter('year'):print(child.tag, child.text)
    
  • 查找所有标签 findall()

    # 查找所有的country标签
    v1 = root.findall('country')
    
  • 查找标签

    # 查找country里面的rank标签,找第一个
    v2 = root.find('country').find('rank')
    

3.修改和删除节点

【修改和删除内容只在内存中修改,没有存到文件中,都要重新保存文件】

  • 修改节点内容

    #修改rank文本
    rank.text = "999"
    tree = ET.ElementTree(root)
    tree.write("new.xml", encoding='utf-8')
    
  • 修改节点属性

    #修改rank属性
    rank.set('update', '2020-11-11')
    tree = ET.ElementTree(root)
    tree.write("new.xml", encoding='utf-8')
    
  • 保存文件

    tree = ET.ElementTree(root)
    tree.write("new.xml", encoding='utf-8')
    
  • 删除节点

    root.remove( root.find('country') )
    tree = ET.ElementTree(root)
    tree.write("new.xml", encoding='utf-8')
    

4.构建文档

  • 方式一ET.Element()
<home><son name="儿1"><grandson name="儿11"></grandson><grandson name="儿12"></grandson></son><son name="儿2"></son>
</home>
from xml.etree import ElementTree as ET
#创建根标签
root=ET.Element('home')
# 创建大儿子,与root还没有关系
son1=ET.Element('son',{'name':'儿1'})
#创建小儿子,与root还没有关系
son2=ET.Element('son',{'name':'儿2'})#创建2个孙子
grandson1=ET.Element('grandson',{'name':'儿11'})
grandson2=ET.Element('grandson',{'name':'儿12'})# 创建两个孙子,与son1还没有关系
son1.append(grandson1)
son1.append(grandson2)# 把儿子添加到根节点
root.append(son1)
root.append(son2)#root节点放到根节点中
tree=ET.ElementTree(root)
#保存xml文件
# short_empty_elements=True,节点中没有元素,用简写方式显示例:<grandson name="儿11" />
tree.write('file/root.xml',encoding='utf-8',short_empty_elements=True)
  • 方式二 标签.makeelement()
<famliy><son name="儿1"><grandson name="儿11"></grandson><grandson name="儿12"></grandson></son><son name="儿2"></son>
</famliy>
from xml.etree import ElementTree as ET# 创建根节点
root = ET.Element("famliy")# 创建大儿子,与root还没有关系
son1 = root.makeelement('son', {'name': '儿1'})#创建小儿子,与root还没有关系
son2 = root.makeelement('son', {"name": '儿2'})# 创建两个孙子,与son1还没有关系
grandson1 = son1.makeelement('grandson', {'name': '儿11'})
grandson2 = son1.makeelement('grandson', {'name': '儿12'})son1.append(grandson1)
son1.append(grandson2)# 把儿子添加到根节点中
root.append(son1)
root.append(son2)tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8')
  • 方式三 标签.SubElement(),创建标签的子标签

    <famliy><son name="儿1"><age name="儿11">孙子</age></son><son name="儿2"></son>
    </famliy>
    
    from xml.etree import ElementTree as ET# 创建根节点
    root = ET.Element("famliy")# 创建root节点的子标签大儿子
    son1 = ET.SubElement(root, "son", attrib={'name': '儿1'})
    # 创建root节点的子标签小儿子
    son2 = ET.SubElement(root, "son", attrib={"name": "儿2"})# 在大儿子中创建一个孙子
    grandson1 = ET.SubElement(son1, "age", attrib={'name': '儿11'})
    grandson1.text = '孙子'et = ET.ElementTree(root)  #生成文档对象
    et.write("test.xml", encoding="utf-8")
    
  • 方式四

    <user><![CDATA[你好呀]]</user>
    
    from xml.etree import ElementTree as ET# 创建根节点
    root = ET.Element("user")
    #<![CDATA[你好呀]]直接添加到文本里
    root.text = "<![CDATA[你好呀]]"et = ET.ElementTree(root)  # 生成文档对象
    et.write("test.xml", encoding="utf-8")
    

python操作XML格式文件相关推荐

  1. python获取的html转换为json,python读取XML格式文件并转为json格式

    XML文件如下: 红楼梦书名> 曹雪芹作者> 描述贾宝玉和林黛玉的爱情故事主要内容> 人民文学出版社出版社> 图书> 一.python读取XML格式文件代码: impor ...

  2. python操作xlsx格式文件

    python操作xlsx格式文件 一.准备工作 二 .xlrd库读取 三.pandas库读取 1.安装pandas: pip install pandas 2.代码如下 3.操作行列 一.准备工作 二 ...

  3. python操作excel格式文件

    python操作excel格式文件 1. 读数据 2. 写excel 3.操作整合 1. 读数据 安装包 pip install openpyxl 导包 from openpyxl import lo ...

  4. cpythonjava解释xml_详解python使用lxml操作xml格式文件

    python利用lxml读写xml格式的文件 之前在转换数据集格式的时候需要将json转换到xml文件,用lxml包进行操作非常方便. 1. 写xml文件 a) 用etree和objectify fr ...

  5. 用 python 来操作 docx, xlsx 格式文件(二)(使用 docx 库操作 docx 格式文件

    docx 库 文章结构: 一.docx 基本用,创建 docx 文件并添加数据 二.深入理解文本格式(format),并设置所格式属性(attribute) 三.深入理解样式(styles),以及如何 ...

  6. python-docx库_用 python 来操作 docx, xlsx 格式文件(二)(使用 docx 库操作 docx 格式文件...

    docx 库 文章结构: 一.docx 基本用,创建 docx 文件并添加数据 二.深入理解文本格式(format),并设置所格式属性(attribute) 三.深入理解样式(styles),以及如何 ...

  7. python使用 docx 库操作 docx 格式文件

    docx 库 文章结构: 一.docx 基本用,创建 docx 文件并添加数据 二.深入理解文本格式(format),并设置所格式属性(attribute) 三.深入理解样式(styles),以及如何 ...

  8. xml python gb2312_使用Python处理XML格式数据的方法介绍

    本文实例讲述了Python处理XML格式数据的方法.分享给大家供大家参考,具体如下: 这里的操作是基于Python3平台. 在使用Python处理XML的问题上,首先遇到的是编码问题. Python并 ...

  9. voc数据集格式转换为coco数据集格式+修改xml格式文件

    voc数据集格式转换为coco格式+修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 下面这份代码只需修改文件所在 ...

最新文章

  1. 直播回顾 | 最强中文NLP预训练模型艾尼ERNIE官方揭秘
  2. python第三方库有哪些常用的、请列举15个-python基础面试常见题
  3. python就业方向及工资-Python的5大就业方向,薪资诱人前景好!
  4. 5G的场景、需求、通信速率
  5. python解析二维码_Python二维码生成识别实例详解
  6. docker 漏洞_Ghost安全漏洞,Revolution Analytics被收购,Docker领导等
  7. 【numpy】np.random.normal()函数
  8. 移动端API接口优化的术和结果
  9. 多标签文本分类研究进展
  10. 【鸿蒙学院】调试鸿蒙(HarmonyOS)App源代码的两种方式
  11. 海康威视SDK基于JAVA二次开发
  12. Universal Radio Hacker(URH):一个用于逆向解析和攻击无线通信协议的开源工具
  13. 拦截器和过滤器之间的区别
  14. dos2unix命令详解
  15. 关于使用response.addCookie 添加失败
  16. 滚轮每次滚动距离是一致的吗_「超硬核科普」鼠标的发展历史,中国人发明的鼠标滚轮...
  17. css3风吹树叶,纯CSS3实现的树叶形状和飘落动画
  18. 嵌入式以太网第一部分——ENC28J60网卡驱动
  19. 【吴刚】个人网站设计初级入门标准视频教程-吴刚-专题视频课程
  20. 安装win10时Raid模式下无法识别固态硬盘的问题

热门文章

  1. Drupal8安装中文出现错误
  2. jetson nano更新镜像源
  3. ThreadLocal 与 static 变量
  4. set集合,深浅拷贝
  5. Python3 - Docker基础详解(三)
  6. web服务器和web应用服务器的区别
  7. 爬虫-关于豆瓣top250的数据可视化
  8. Python 数据库连接池
  9. 精益生产之改善活动的20个原则
  10. 女性皮肤为什么细腻_为女性开启科技之门