how to build xml file in python, with formatting
我正在尝试用python构建一个XML文件,这样我就可以把它写到一个文件中,但是新的行和tabbing等会让我变得复杂。
我不能使用一个模块来完成这项工作,因为我使用的是一个精简版的python 2。一定都是纯Python。
例如,如何使用这种格式创建一个XML文件,它保留了所有新行和制表符(空白)?
例如
1 2 3 4 5 6 | <?xml version="1.0" encoding="UTF-8"?> <myfiledata> <mydata> blahblah </mydata> </myfiledata> |
我试着把每一行都包起来
1 2 3 | ' <myfiledata>' + ' blahblah' + |
等。
但是,我从脚本中得到的输出与我的python文件中的输出不太接近,有多余的空白空间,新行不能正常工作。
有什么明确的方法可以做到这一点吗?我宁愿编辑一个看起来有点像我将要结束的文件-为了清晰起见…
您可以使用saxutils中的xmlgenerator来生成XML,使用xml.dom.minidom来解析它并打印漂亮的XML(这两个模块都来自Python2中的标准库)。
创建XML并漂亮地打印它的示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from __future__ import print_function from xml.sax.saxutils import XMLGenerator import io import xml.dom.minidom def pprint_xml_string(s): """Pretty-print an XML string with minidom""" parsed = xml.dom.minidom.parse(io.BytesIO(s)) return parsed.toprettyxml() # create a XML file in-memory: fp = io.BytesIO() xg = XMLGenerator(fp) xg.startDocument() xg.startElement('root', {}) xg.startElement('subitem', {}) xg.characters('text content') xg.endElement('subitem') xg.startElement('subitem', {}) xg.characters('text content for another subitem') xg.endElement('subitem') xg.endElement('root') xg.endDocument() # pretty-print it xml_string = fp.getvalue() pretty_xml = pprint_xml_string(xml_string) print(pretty_xml) |
输出为:
1 2 3 4 5 | <?xml version="1.0" ?> <root> <subitem>text content</subitem> <subitem>text content for another subitem</subitem> </root> |
请注意,文本内容元素(包装在
答案是使用xml.element.tree和从xml.dom导入minidom
在python 2.5上都有