I’ve written a Python script to create some XML, but I didn’t find a way to edit the heading within Python.
Basically, instead of having this as my heading:
<?xml version="1.0" ?>
I need to have this:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
I looked into this as best I could, but found no way to add standalone status from within Python. So I figured that I’d have to go over the file after it had been created and then replace the text. I read in several places that I should stay far away from using readlines() because it could ruin the XML formatting.
Currently the code I have to do this – which I got from another Stackoverflow post about editing XML with Python – is:
doc = parse('file.xml')
elem = doc.find('xml version="1.0"')
elem.text = 'xml version="1.0" encoding="UTF-8" standalone="no"'
That provides me with a KeyError. I’ve tried to debug it to no avail, which leads me to believe that perhaps the XML heading wasn’t meant to be edited in this way. Or my code is just wrong.
If anyone is curious (or miraculously knows how to insert standalone status into Python code), here is my code to write the xml file:
with open('file.xml', 'w') as f:
f.write(doc.toprettyxml(indent=' '))
Some people don’t like “toprettyxml”, but with my relatively basic level, it seemed like the best bet.
Anyway, if anyone can provide some advice or insight, I would be very grateful.
The
xml.etreeAPI does not give you any options to write out astandaloneattribute in the XML declaration.You may want to use the
lxmllibrary instead; it uses the same ElementTree API, but offers more control over the output.tostring()supports astandaloneflag:or use
.write(), which support the same options: