使用python的minidom模块格式化、对齐、换行、整理xml文件 您所在的位置:网站首页 python文件输出换行 使用python的minidom模块格式化、对齐、换行、整理xml文件

使用python的minidom模块格式化、对齐、换行、整理xml文件

2024-06-26 21:51| 来源: 网络整理| 查看: 265

#_*_encoding:utf-8_*_ # -- seanyxie 2012.3.23 -- # ===minidom操作XML代码示例 import xml from xml.dom import minidom import codecs # ==由于minidom默认的writexml()函数在读取一个xml文件后,修改后重新写入如果加了newl='\n',会将原有的xml中写入多余的行 #  ==因此使用下面这个函数来代替 def fixed_writexml(self, writer, indent="", addindent="", newl=""): # indent = current indentation # addindent = indentation to add to higher levels # newl = newline string writer.write(indent+"") self.childNodes[0].writexml(writer, "", "", "") writer.write("%s" % (self.tagName, newl)) return writer.write(">%s"%(newl)) for node in self.childNodes: if node.nodeType is not minidom.Node.TEXT_NODE: node.writexml(writer,indent+addindent,addindent,newl) writer.write("%s%s" % (indent,self.tagName,newl)) else: writer.write("/>%s"%(newl)) minidom.Element.writexml = fixed_writexml def opXml(): # =====从一个空xml文档开始 impl = xml.dom.getDOMImplementation() dom = impl.createDocument(None,'All_Students',None) root = dom.documentElement # --创建一个节点,并添加到root下 student = dom.createElement('student') root.appendChild(student) # --创建一个子节点,并设置属性 nameE = dom.createElement('name') value = u'陈奕迅' nameE.setAttribute("attr",value) nameN = dom.createTextNode(value) nameE.appendChild(nameN) student.appendChild(nameE) # -- 写进文件,如果出现了unicode,指定文件的编码 f = codecs.open('1.xml','w','utf-8') dom.writexml(f,addindent=' ',newl='\n',encoding = 'utf-8') f.close() #=====处理一个已经存在的xml文档 dom = xml.dom.minidom.parse("1.xml") root = dom.documentElement # -- 重新设置属性 # --- 返回所有node name为student的节点 allnodes = dom.getElementsByTagName('student') value = u'王力宏' for node in allnodes: node.setAttribute('name',value) # --删除节点属性 for node in allnodes: node.removeAttribute('name') # --每个节点有 nodeType,nodeName,和nodeVaulue 等属性 # --对于textNode,想得到它的文本内容可以使用: .data属性 print node.nodeType,node.nodeValue # --也可以删除节点 root.removeChild(node) f = codecs.open('1.xml','w','utf-8') dom.writexml(f,addindent=' ',newl='\n',encoding = 'utf-8') f.close() if __name__=='__main__': opXml()

请注意代码开头import的部分,不要忘记。 事实上可以使用minidom本身的dom.writexml(f,addindent=’ ‘,newl=’\n’,encoding = ‘utf-8’) 来格式话xml,但是结果不尽如人意,使用fixed_writexml相信就能满足大部分人要求了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有