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实现socket客户端和服务端简单示例
Feb 24 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
python 猴子补丁(monkey patch)
Jun 26 Python
django认证系统 Authentication使用详解
Jul 22 Python
python代码xml转txt实例
Mar 10 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
Python 操作SQLite数据库的示例
Oct 16 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 Python
如何获取numpy array前N个最大值
May 14 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
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
javascript写的日历类(基于pj)
2010/12/28 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
Node.js实现文件上传
2016/07/05 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
Python获取远程文件大小的函数代码分享
2014/05/13 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
python爬虫可以爬什么
2020/06/16 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
联想德国官网:Lenovo Germany
2018/07/04 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
营业经理岗位职责
2013/11/10 职场文书
会计岗位职责模板
2014/03/12 职场文书
法律系毕业生求职信
2014/05/28 职场文书
公司副总经理任命书
2014/06/05 职场文书
身边的榜样活动方案
2014/08/20 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
师德承诺书
2015/01/20 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
HTML中的表单元素介绍
2022/02/28 HTML / CSS