zoukankan      html  css  js  c++  java
  • 【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 = '	', newl = '
    ', encoding = 'utf-8'))
    doc.writexml(f,indent = '	',newl = '
    ', addindent = '	',encoding='utf-8')
    f.close()
    

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

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

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



    作者:VeyronC
    链接:https://www.jianshu.com/p/17386972a23b
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
    另外:关于xml设置节点属性的问题:
  • 相关阅读:
    《JavaScript高级程序设计》读书笔记 ---继承
    技术人员在小公司成长 vs 大公司成长路径和建议
    原生JS forEach()和map()遍历的区别以及兼容写法
    《JavaScript高级程序设计》读书笔记 ---创建对象
    《JavaScript高级程序设计》读书笔记 ---理解对象
    《JavaScript高级程序设计》读书笔记 ---小结
    《JavaScript高级程序设计》读书笔记 ---单体内置对象
    《JavaScript高级程序设计》读书笔记 ---基本包装类型
    《JavaScript高级程序设计》读书笔记 ---Function 类型
    《JavaScript高级程序设计》读书笔记 ---RegExp 类型
  • 原文地址:https://www.cnblogs.com/waimen/p/12582573.html
Copyright © 2011-2022 走看看