Python minidom模块用法示例【DOM写入和解析XML】


Posted in Python onMarch 25, 2019

本文实例讲述了Python minidom模块用法。分享给大家供大家参考,具体如下:

一、DOM写XML文件

# -*- coding:utf-8 -*-
#!python3
#导入minidom
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))

生成的dom_write.xml文件结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <book price="199"/>
 <name>计算机程序设计语言 第1版</name>
</root>

二、DOM解析XML文件

# -*- coding:utf-8 -*-
#!python3
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)

运行输出:

root
1
[<DOM Text node "'\n\t'">, <DOM Element: book at 0x1dd2800>, <DOM Text node "'\n\t'">, <DOM Element: name at 0x1dd2850>, <DOM Text node "'\n'">]
199
计算机程序设计语言 第1版
root

Python 相关文章推荐
详解Python的Django框架中的模版继承
Jul 16 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
python实现用户管理系统
Jan 10 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
如何使用Python实现斐波那契数列
Jul 02 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
Python中random模块常用方法的使用教程
Oct 04 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 #Python
详解Python装饰器
Mar 25 #Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 #Python
Python3.5实现的三级菜单功能示例
Mar 25 #Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 #Python
Python for循环与range函数的使用详解
Mar 23 #Python
详解Python读取yaml文件多层菜单
Mar 23 #Python
You might like
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
理解javascript封装
2016/02/23 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
python日志模块logbook使用方法
2019/09/19 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
Android面试题附答案
2014/12/08 面试题
小学一年级数学教学计划
2015/01/20 职场文书
大学四年个人总结
2015/03/03 职场文书
道歉的话怎么说
2015/05/12 职场文书
遗嘱格式范本
2015/08/07 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书