【Python】生成多级树结构的xml文件


欲成这样的xml结构

<?xml version="1.0" encoding="utf-8"?> <DOCUMENT content_method="full"> <item> <key>Key1</key> <display> <url>https://www.baidu.com/</url> <title>哈哈</title> </display> </item> </DOCUMENT> 

需要如下代码:

#encoding:utf-8 ''' 根据一个给定的XML Schema,使用DOM树的形式从空白文件生成一个XML。 ''' from xml.dom.minidom import Document doc = Document() #创建DOM文档对象 DOCUMENT = doc.createElement('DOCUMENT') #创建根元素 DOCUMENT.setAttribute('content_method',"full")#设置命名空间 #DOCUMENT.setAttribute('xsi:noNamespaceSchemaLocation','DOCUMENT.xsd')#引用本地XML Schema doc.appendChild(DOCUMENT) ############item:Python处理XML之Minidom################ item = doc.createElement('item') #item.setAttribute('genre','XML') DOCUMENT.appendChild(item) key = doc.createElement('key') key_text = doc.createTextNode('Key1') #元素内容写入 key.appendChild(key_text) item.appendChild(key) display = doc.createElement('display') item.appendChild(display) display_url = doc.createElement('url') display_title = doc.createElement('title') display_url_text = doc.createTextNode('https://www.baidu.com/') display_title_text = doc.createTextNode('哈哈') display.appendChild(display_url) display.appendChild(display_title) display_url.appendChild(display_url_text) display_title.appendChild(display_title_text) item.appendChild(display) ''' price = doc.createElement('price') price_text = doc.createTextNode('28') price.appendChild(price_text) item.appendChild(price) ''' ########### 将DOM对象doc写入文件 f = open('tel.xml','w') #f.write(doc.toprettyxml(indent = '\t', newl = '\n', encoding = 'utf-8')) doc.writexml(f,indent = '\t',newl = '\n', addindent = '\t',encoding='utf-8') f.close() 

dom对象树已经生成好了,我们可以调用dom的writexml()方法来将内容写入文件中。writexml()方法语法格式为:
writexml(writer, indent, addindent, newl, encoding)

  • writer是文件对象
  • indent是每个tag前填充的字符,如:’ ‘,则表示每个tag前有两个空格
  • addindent是每个子结点的缩近字符
  • newl是每个tag后填充的字符,如:’\n’,则表示每个tag后面有一个回车
  • encoding是生成的XML信息头中的encoding属性值,在输出时minidom并不真正进行编码的处理,如果你保存的文本内容中有汉字,则需要自已进行编码转换。
  • writexml方法是除了writer参数必须要有外,其余可以省略。

廖雪峰Python:
操作XML有两种方法:DOM和SAX。DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点。SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件。



作者:VeyronC
链接:https://www.jianshu.com/p/17386972a23b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
另外:关于xml设置节点属性的问题:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM