1. 介绍
1.1 介绍
福哥今天要教给大家使用Python处理XML文档。XML文档格式是一种比JSON文档格式更加复杂的一种文本文档格式,XML文档包括节点和属性两个元素,节点名称可以重复,一个节点上的属性名称必须唯一,节点名称和属性名称没有统一性要求,相比较JSON格式XML格式可以存储更加复杂的关系的数据结构。
Python操作XML文档推荐使用minidom这个库,minidom库在xml.dom这个包里面。
2. 安装
xml.dom.minidom不需要安装,默认就环境里就有了。
from xml.dom import minidom
3. 使用
3.1 生成文档
首先我们来学习使用minidom来创建一个XML文档,使用minidom创建XML文档有点麻烦,每create一个对象都要自己去append这个对象,所有对象都要通过Document来创建,实在繁琐。
newDoc = minidom.Document()
rootNode = newDoc.createElement('root')
newDoc.appendChild(rootNode)
firstNode = newDoc.createElement('firstNode')
firstNode.setAttribute("rowid", "1")
firstNode.setAttribute("tableid", "100")
rootNode.appendChild(firstNode)
idNode = newDoc.createElement('id')
firstNode.appendChild(idNode)
idText = newDoc.createTextNode('35')
idNode.appendChild(idText)
nameNode = newDoc.createElement('name')
firstNode.appendChild(nameNode)
nameText = newDoc.createTextNode('福哥')
nameNode.appendChild(nameText)
with open(rootDir + "/test.xml", "w", encoding="utf-8") as fo:
newDoc.writexml(fo, indent='', addindent='\t', newl='\n', encoding="utf-8")
fo.close()
3.2 解析文档
接着我们来解析这个XML文档。
可以使用childNodes进行逐级的遍历得到所有节点,但是XML文档的每个节点前后都会有一个#text节点,这个比较麻烦。
我们还可以使用getElementsByTagName来直接定位节点,福哥推荐这种方式来定位目标节点。注意即使只有一个子节点返回的也是一个数值,要记得取0位元素。
with open(rootDir + "/test.xml", "r", encoding="utf-8") as fo:
myDoc = minidom.parse(fo)
fo.close()
rootNode = myDoc.documentElement
# root child nodes
if rootNode.childNodes:
for d in range(0, len(rootNode.childNodes)):
myNode = rootNode.childNodes[d]
print(myNode.nodeName, myNode.nodeType)
if myNode.nodeName == "firstNode":
# attributes
if myNode.attributes:
myAttrs = myNode.attributes.items()
for e in range(0, len(myAttrs)):
myAttrName = myAttrs[e][0]
myAttrValue = myAttrs[e][1]
print(myNode.nodeName, "attribute: ", myAttrName, myAttrValue)
# child nodes
id = myNode.getElementsByTagName('id')
print(myNode.nodeName, "child node: ", id[0].childNodes[0].data)
name = myNode.getElementsByTagName('name')
print(myNode.nodeName, "child node: ", name[0].childNodes[0].data)
4. 总结
今天福哥带着童鞋们学习了使用Python去操作XML文档的技巧,福哥推荐使用minidom这个库,它足够简单,且足够应付我们日常的编程需要!
https://m.tongfu.net/home/35/blog/513421.html
本文暂时没有评论,来添加一个吧(●'◡'●)