当前位置:网站首页>minidom 模块写入和解析 XML
minidom 模块写入和解析 XML
2022-07-04 20:26:00 【Harrytsz】
一、写 XML 文件
from xml.dom import minidom
# 1.创建DOM树对象
dom=minidom.Document()
# 2.创建根节点。每次都要用DOM对象来创建任何节点。
root_node=dom.createElement('root')
# 3.用DOM对象添加根节点
dom.appendChild(root_node)
# 用DOM对象创建元素子节点
book_node=dom.createElement('book')
# 用父节点对象添加元素子节点
root_node.appendChild(book_node)
# 设置该节点的属性
book_node.setAttribute('price','199')
name_node=dom.createElement('name')
root_node.appendChild(name_node)
# 也用DOM创建文本节点,把文本节点(文字内容)看成子节点
name_text=dom.createTextNode('计算机程序设计语言 第1版')
# 用添加了文本的节点对象(看成文本节点的父节点)添加文本节点
name_node.appendChild(name_text)
# 每一个结点对象(包括dom对象本身)都有输出XML内容的方法,如:toxml()--字符串, toprettyxml()--美化树形格式。
try:
with open('dom_write.xml','w',encoding='UTF-8') as fh:
# 4.writexml()第一个参数是目标文件对象,第二个参数是根节点的缩进格式,第三个参数是其他子节点的缩进格式,
# 第四个参数制定了换行格式,第五个参数制定了xml内容的编码。
dom.writexml(fh,indent='',addindent='\t',newl='\n',encoding='UTF-8')
print('写入xml OK!')
except Exception as err:
print('错误信息:{0}'.format(err))
结果如下:
<?xml version="1.0" encoding="utf8"?>
<root>
<book price="99">
<name>计算机程序设计语言 第1版</name>
</book>
</root>
二、解析 XML 文件
from xml.dom import minidom
with open('dom_write.xml','r',encoding='utf8') as fh:
# parse()获取DOM对象
dom = minidom.parse(fh)
# 获取根节点
root = dom.documentElement
# 节点名称
print(root.nodeName)
# 节点类型:'ELEMENT_NODE',元素节点; 'TEXT_NODE',文本节点; 'ATTRIBUTE_NODE',属性节点
print(root.nodeType)
# 获取某个节点下所有子节点,是个列表
print(root.childNodes)
# 通过dom对象或根元素,再根据标签名获取元素节点,是个列表
book = root.getElementsByTagName('book')[0]
# 获取节点属性
print(book.getAttribute('price'))
# 获取某个元素节点的文本内容,先获取子文本节点,然后通过“data”属性获取文本内容
name = root.getElementsByTagName('name')[0]
name_text_node = name.childNodes[0]
print(name_text_node.data)
# 获取某节点的父节点
print(name.parentNode.nodeName)
边栏推荐
- LeetCode 8. String conversion integer (ATOI)
- 每日一题-LeetCode556-下一个更大元素III-字符串-双指针-next_permutation
- js 3D爆炸碎片图片切换js特效
- In the face of the same complex test task, why can the elder sort out the solution quickly? Ali's ten-year test engineers showed their skills
- torch.tensor和torch.Tensor的区别
- 【微服务|SCG】Predicate的使用
- Huawei ENSP simulator layer 3 switch
- acwing 3302. 表达式求值
- Solution of 5g unstable 5g signal often dropped in NetWare r7000 Merlin system
- RFID仓储管理系统解决方案的优点
猜你喜欢
【服务器数据恢复】某品牌服务器存储raid5数据恢复案例
LeetCode+ 81 - 85 单调栈专题
【1200. 最小絕對差】
WinCC7.5 SP1如何通过交叉索引来寻找变量及其位置?
The video sound of station B is very low - solution
MySQL - database query - use of aggregate function, aggregate query, grouping query
杰理之AD 系列 MIDI 功能说明【篇】
Render function and virtual DOM
五子棋 上班摸鱼工具 可局域网/人机
B站视频 声音很小——解决办法
随机推荐
网络命名空间
torch. Tensor and torch The difference between tensor
每日一题-LeetCode556-下一个更大元素III-字符串-双指针-next_permutation
js 3D爆炸碎片图片切换js特效
MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询
Quelques suggestions pour la conception de l'interface
杰理之AD 系列 MIDI 功能说明【篇】
杰理之AD 系列 MIDI 功能说明【篇】
In the release version, the random white screen does not display the content after opening the shutter
In the face of the same complex test task, why can the elder sort out the solution quickly? Ali's ten-year test engineers showed their skills
Huawei ENSP simulator layer 3 switch
2021 CCPC 哈尔滨 B. Magical Subsequence(思维题)
插入排序,选择排序,冒泡排序
杰理之AD 系列 MIDI 功能说明【篇】
Some suggestions for interface design
async await 在map中使用
vim异步问题
Go language notes (4) go common management commands
杰理之AD 系列 MIDI 功能说明【篇】
What are the functional modules of RFID warehouse management system solution