如何使用 Python 创建 XML 文件?

问题描述

我想创建一个 XML 文件。 我试过了,但格式看起来很糟糕,它只显示在一行中。

这是:

import xml.etree.cElementTree as ET
root = ET.Element("data")
doc = ET.SubElement(root,"status",date="20210123")

ET.SubElement(doc,"name",name="john").text = "some value1"
ET.SubElement(doc,"class",name="abc").text = "some vlaue2"

tree = ET.ElementTree(root)
tree.write("FILE.xml")

输出为:

<data><status date="20210123"><name name="john">some value1</name><class name="abc">some vlaue2</class></status></data>

但我的期望输出是:

<?xml version="1.0" encoding="UTF-8"?>

<data>
     <status>
          <name name="john">some value1</name>
          <class name="abc">some vlaue2</class>
     </status>
</data>

任何人都可以给我一个想法,拜托。我真的很感激。谢谢

解决方法

你需要

  1. 使用 ET.tostring() 将您的 xml 获取为字符串
  2. 使用 xml.dom.minidom 从字符串中获取 DOM 对象
  3. 使用 DOM 对象的 toprettyxml() 获取 xml 作为格式化字符串
  4. 通过简单的拆分和连接格式化字符串,将编码信息添加到xml声明部分
  5. 将字符串写入文件

代码:

import xml.etree.cElementTree as ET
import xml.dom.minidom

m_encoding = 'UTF-8'

root = ET.Element("data")
doc = ET.SubElement(root,"status",date="20210123")
ET.SubElement(doc,"name",name="john").text = "some value1"
ET.SubElement(doc,"class",name="abc").text = "some vlaue2"

dom = xml.dom.minidom.parseString(ET.tostring(root))
xml_string = dom.toprettyxml()
part1,part2 = xml_string.split('?>')

with open("FILE.xml",'w') as xfile:
    xfile.write(part1 + 'encoding=\"{}\"?>\n'.format(m_encoding) + part2)
    xfile.close()

输出文件

<?xml version="1.0" encoding="UTF-8"?>

<data>
    <status date="20210123">
        <name name="john">some value1</name>
        <class name="abc">some vlaue2</class>
    </status>
</data>