⽤DOM实现对XML⽂件的解析DOM 解析器介绍
DOM的 xml.dom.minidom ⼦模块、xml.dom.pulldom ⼦模块分别提供两种形式的解析器。
xml.dom.minidom ⼦模块
主要提供对 XML ⽂档的读、修改操作,解析器的使⽤格式如下:
xml.dom.minidom.parse(filename_or_file,parse=None,bufsize=None)
该解析器解析成功,返回指定 XML ⽂件的⼀个⽂档对象。
本⽂⽤到的 DOM 对象的相关函数介绍
1.1 Node 接⼝对象相关函数
Node.childNodes,返回当前节点中包含的节点列表,这是⼀个只读属性。
1.2 Document 接⼝对象相关函数
Document.documentElement,返回⽂档的所有元素。
1.3 Element 接⼝对象相关函数
Element.hasAttribute(name),如果元素具有按指定 name 命名的属性,返回True。
⽂件解析⽰例
1、 XML⽂件(l)
<collection shelf="New Arrivals">
<movies title="Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movies>
</collection>
2、 DOM解析XML⽂件(sax_movie.py)
from xml.dom.minidom import parse
import xml.dom.minidom
# 使⽤minidom解析器打开 XML ⽂档
DOMTree = xml.dom.minidom.parse('D:\\My-python\\XML\\l')
# 该解析器解析成功,返回⼀个⽂档对象DOMTree接收
collection = DOMTree.documentElement # 把所有的元素存⼊集合中
l())
if collection.hasAttribute("shelf"):
print ("Root element : %s" % Attribute("shelf"))
# 获取movie元素下的⼦元素集合
movies = ElementsByTagName("movies")
movies_record = []
# 打印每部电影的详细信息
for movie in movies:
if movie.hasAttribute("title"): # 判断是否存在title属性
movies_record.Attribute("title")) # 获取属性对应的值
type = ElementsByTagName('type')[0] # 获取 type 标签对应的元素
movies_record.append(type.childNodes[0].data) # 获取 type 元素对应的值
format = ElementsByTagName('format')[0]
movies_record.append(format.childNodes[0].data)
rating = ElementsByTagName('rating')[0]
movies_record.append(rating.childNodes[0].data)
stars = ElementsByTagName('stars')[0]
movies_record.append(stars.childNodes[0].data)
description = ElementsByTagName('description')[0]
movies_record.append(description.childNodes[0].data)
print(movies_record)
3、运⾏结果
<collection shelf="New Arrivals">
<movies title="Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movies>
</collection>
Root element : New Arrivals
['Enemy Behind', 'War, Thriller', 'DVD', 'PG', '10', 'Talk about a US-Japan war'] DOM实现对XML⽂件内容的修改1、代码(DOM_edit_XML.py)
from xml.dom.minidom import parse
import xml.dom.minidom
# 使⽤minidom解析器打开 XML ⽂档
DOMTree = xml.dom.minidom.parse('D:\\My-python\\XML\\l')
# 该解析器解析成功,返回⼀个⽂档对象DOMTree接收
# 把所有的元素存⼊集合中
collection = DOMTree.documentElement
# 获取 stars 的 NodeList 对象集合
stars = ElementsByTagName("stars")
stars_object = stars[0] # 获取列表第⼀个price节点(元素)
stars_object.firstChild.data = 12 # 修改第⼀个节点的值
print('修改数量成功!')
# 获取 movies 的 NodeList 对象集合
movies = ElementsByTagName("movies")
print('删除节点成功')
f = open('D:\\My-python\\XML\\l','w',encoding='utf-8')
f.l())
f.close()
2、修改结果
<?xml version="1.0" ?>
<collection shelf="New Arrivals">
<movies title="Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
python处理xml文件<year>2003</year>
<rating>PG</rating>
<stars>12</stars>
<description>Talk about a US-Japan war</description>
</movies>
</collection>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。