I use the xml
library in Python3.5 for reading and writing an xml-file. I don't modify the file. Just open and write. But the library modifes the file.
- Why is it modified?
- How can I prevent this? e.g. I just want to replace specific tag or it's value in a quite complex xml-file without loosing any other informations.
This is the example file
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
<title>Der Eisbär</title>
<ids>
<entry>
<key>tmdb</key>
<value xsi:type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">9321</value>
</entry>
<entry>
<key>imdb</key>
<value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">tt0167132</value>
</entry>
</ids>
</movie>
This is the code
import xml.etree.ElementTree as ET
tree = ET.parse('x.nfo')
tree.write('y.nfo', encoding='utf-8')
And the xml-file becomes this
<movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<title>Der Eisbär</title>
<ids>
<entry>
<key>tmdb</key>
<value xsi:type="xs:int">9321</value>
</entry>
<entry>
<key>imdb</key>
<value xsi:type="xs:string">tt0167132</value>
</entry>
</ids>
</movie>
- Line 1 is gone.
- The
<movie>
-tag in line 2 has attributes now. - The
<value>
-tag in line 7 and 11 now has less attributes.
lxml
anyway? – Scevourlxml
manages to preserve the namespaces by default, although you still have to pass a flag to get the XML declaration up top. – Scevourlxml
? I didn't notice it. I was just usingxml
as search term in the python doc and foundElementTree
. – Olneylxml
doesn't help, too. It does some transformations of the code, too. – Olneylxml
does is sort them. So even if they are changed on the first write, they will be consistent on all subsequent writes. – Scevour