如何使用 Python 创建 XML 文件?

Che*_*ies 1 python xml pretty-print elementtree

我想创建一个 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")
Run Code Online (Sandbox Code Playgroud)

输出是:

<data><status date="20210123"><name name="john">some value1</name><class name="abc">some vlaue2</class></status></data>
Run Code Online (Sandbox Code Playgroud)

但我的期望输出是:

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

<data>
     <status>
          <name name="john">some value1</name>
          <class name="abc">some vlaue2</class>
     </status>
</data>
Run Code Online (Sandbox Code Playgroud)

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

Abh*_*i_J 8

你需要

  1. 用于ET.tostring()获取字符串形式的 xml
  2. 用于从字符串中xml.dom.minidom获取DOM 对象
  3. 使用toprettyxml()DOM 对象获取 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()
Run Code Online (Sandbox Code Playgroud)

输出文件

<?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>
Run Code Online (Sandbox Code Playgroud)