python格式化输出简单xml

来源:互联网 发布:c语言编程表白 编辑:程序博客网 时间:2024/05/20 01:09

xml每项数据都可以包含tag、attribute、text。最简单的方法是使用python自带的xml.etree.ElementTree进行操作,最简单直观但安全性差(针对某些恶意xml内容),但在不用于读取,仅用于生成的时候还是很好用的。
其中每个Element对象都有以下属性

<tag attrib1=1>text</tag>tail1. tag:string对象,表示数据代表的种类。2. attrib:dictionary对象,表示附有的属性。3. textstring对象,表示element的内容。4. tail:string对象,表示element闭合之后的尾迹。

要创建一个简单的xml文件,可以这样操作

from xml.etree import ElementTree as ET# 新建节点root = ET.Element('root')# 三种子节点创建方式a = ET.SubElement(root, 'anode')b = ET.Element('bnode')root.append(b)c = ET.Element('cnode')root.extend([b, c])# 修改属性b.tag = 'NodeB'b.text = 'In the NodeB!'a.set('attra', 'true')b.attrib = {    'a': '1',    'b': '2'}b.set('a', '3')b.insert(0, c)# 输出tree = ET.ElementTree(root)tree.write('out.xml', encoding = 'utf-8', xml_declaration = True)# 输出结果"""<?xml version='1.0' encoding='utf-8'?><root><anode attra="true" /><NodeB a="3" b="2">In the NodeB!<cnode /></NodeB><NodeB a="3" b="2">In the NodeB!<cnode /></NodeB><cnode /></root>"""

那么问题来了。。。。。除了xml声明,所有的内容都在一行,想生成带缩进的xml文档怎么办?
选择使用对python的xml库拓展的lxml库,基本操作和etree相同,但增加了一些限制,如attrib属性不可直接修改

from lxml import etreeroot = etree.Element('root')a = etree.SubElement(root, 'anode')b = etree.Element('bnode')root.append(b)c = etree.Element('cnode')root.extend([b, c])b.tag = 'NodeB'b.text = 'In the NodeB!'a.set('attra', 'true')# 直接修改attrib属性不再可用b.set('a', '1')b.set('b', '2')b.insert(0, c)tree = etree.ElementTree(root)tree.write('out.xml', pretty_print=True, encoding = 'utf-8', xml_declaration = True)# 输出结果"""<?xml version='1.0' encoding='UTF-8'?><root>  <anode attra="true"/>  <NodeB a="1" b="2">In the NodeB!<cnode/></NodeB></root>""" 
原创粉丝点击