版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laozhuxinlu/article/details/71720588
Python之XML文件操作
前面我们介绍了Python对json文件的操作,相对还是比较简单的。这里给大家介绍怎么对XML文件操作,包括新建xml/修改/保存。
首先,需要加载的model有:
from xml.dom.minidom import Document
然后创建并保存:
doc = Document()
root = doc.createElement('div1')
doc.appendChild(root)
planType = doc.createElement('div2')
planType.appendChild(doc.createTextNode('div2_TextNode'))
playName = doc.createElement('div3')
playName.appendChild(doc.createTextNode('div3_TextNode'))
root.appendChild(planType)
root.appendChild(playName)
fb = open('/home/xiangang.zhu/Desktop/jsontest/TestData.xml','w')
doc.writexml(fb,indent = '\t',addindent = '\t',newl = '\n', encoding = 'utf-8')
fb.close()
讲解: 可以看到,我们创建的TestData.xml一个主节点:div1,两个并列的子节点:div2, 且div2节点下包含有内容。
最后通过open函数结合Document.writexml()函数实现写入xml格式内容。其中:
indent = '\t',addindent = '\t',newl = '\n', encoding = 'utf-8' 是对json文件的布局参数设置。
效果如下:
上面介绍的是怎么创建一个xml文件,那么对一个xml文件的修改呢?
需要加载的model有:
import xml.dom.minidom
from xml.dom.minidom import parse
from xml.dom.minidom import Document
from xml.etree import ElementTree
然后,获取到xml文件下的内容:
DOMTree = xml.dom.minidom.parse(xmlPath)
rootTree = DOMTree.documentElement
rootTree获取到了以后,其下的子节点就能通过rootTree.getElementsByTagName一一获取到了:
divByStr = rootTree.getElementsByTagName('div')
那么后面就是对该节点后面的内容进行修改了:
divByStr['div1'].firstChild.data = 'div1_changed_text'
divByStr['div2'].firstChild.data = 'div2_changed_text'
最后就是写入:
fb = open(xmlPath,'w')
DOMTree.writexml(fb,addindent = '\t',newl = '\n',encoding = 'utf-8')
fb.close()
这里需要提到的是,每次写入一次,会发现xml文件下的换行布局会递增,这里解决方式是对xml文件下的文件进行:读取 --> 去掉换行和多余空格 --> 重新写入。 函数如下:
def _resetXMLfile(self,filepath):
emptyline = '\t\n'
fb_r = open(filepath,'r')
result = list()
for line in fb_r.readlines():
if emptyline in line:
continue
elif len(line) == 1:
continue
result.append(line)
finResult = ''.join(result)
fb_r.close()
fb_w = open(filepath,'w')
fb_w.write(finResult)
fb_w .close()
最后可调用一下该resetXMLfile函数,会对xml文件重新布局。