Exported xml isn't well formatted but appears in one line?

泪湿孤枕 提交于 2019-12-04 06:42:13

问题


Here is the code but the exported xml appears badly formatted.

import xml.etree.ElementTree as ET
import os

sampleXML = """<?xml version="1.0" encoding="ASCII"?>
    <Metadata version="1.0">
        <CODE_OK>510</CODE_OK>
        <DeliveryDate>13/08/2018</DeliveryDate>
    </Metadata>
    """

tree = ET.ElementTree(ET.fromstring(sampleXML))
for folder in os.listdir("YourPath"):         #Iterate the dir
    tree.find("CODE_OK").text = folder        #Update dir name in XML
    tree.write(open(os.path.join(r"Path", folder, "newxml.xml"), "wb")) #Write to XML

How to make the exported xml appear normally formatted?


回答1:


I found in docs that xml module has an implementation of Document Object Model interface. I provide a simple example

from xml.dom.minidom import parseString

example = parseString(sampleXML) # your string

# write to file
with open('file.xml', 'w') as file:
    example.writexml(file, indent='\n', addindent=' ')

Output:

<?xml version="1.0" ?>
<Metadata version="1.0">


 <CODE_OK>510</CODE_OK>


 <DeliveryDate>13/08/2018</DeliveryDate>


</Metadata>

Update

You can also write like this

example = parseString(sampleXML).toprettyxml()
with open('file.xml', 'w') as file:
    file.write(example)

Output:

<?xml version="1.0" ?>
<Metadata version="1.0">


    <CODE_OK>510</CODE_OK>


    <DeliveryDate>13/08/2018</DeliveryDate>


</Metadata>

Update 2

I copy all your code and only add indent from this site. And for me is working correctly

import xml.etree.ElementTree as ET
import os

sampleXML = "your xml"
tree = ET.ElementTree(ET.fromstring(sampleXML))

indent(tree.getroot()) # this I add

for folder in os.listdir(path):
    tree.find("CODE_OK").text = folder
    tree.write(open(os.path.join(path, folder, "newxml.xml"), "wb"))


来源:https://stackoverflow.com/questions/51707009/exported-xml-isnt-well-formatted-but-appears-in-one-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!