I am currently writing a python code to manage an existing xml file.
I have this existing xml structure in a model file :
<MYPROJECT>
<VERSION>2</VERSION>
<LANGUAGE>english</LANGUAGE>
<FILE>
<FILENAME>Z</FILENAME>
</FILE>
<PANEL1>
<SOURCE>
<LAYER>MISSING</LAYER>
<NAME>MISSING</NAME>
<ID>MISSING</ID>
</SOURCE>
</PANEL1>
</MYPROJECT>
I need to be able to insert a new tag with its value in "Source" subelement. I want to get this in the end :
<MYPROJECT>
<VERSION>2</VERSION>
<LANGUAGE>english</LANGUAGE>
<FILE>
<FILENAME>toto</FILENAME>
</FILE>
<PANEL1>
<SOURCE>
<LAYER>A</LAYER>
<NAME>B</NAME>
<ID>C</ID>
<NEW_TAG>XX</NEW_TAG>
</SOURCE>
</PANEL1>
</MYPROJECT>
To get this, I use xml.etree.ElementTree and the insert function. Here is my code :
import xml.etree.ElementTree as ET
cheminXML = r"mypath"
def majXML (cheminXML):
tree = ET.parse(cheminXML)
tagProject = ET.Element("MYPROJECT")
tagPanel1 = ET.SubElement(tagProject,'PANEL1')
tagSource = ET.SubElement(tagPanel1,'SOURCE')
tagNewTag = ET.SubElement(tagSource, 'NEW_TAG')
tagNewTag.text = "apple"
print(tagNewTag.text)
tagSource.insert(0,tagNewTag)
tagFilename = tree.find(".//FILENAME")
tagFilename.text = "toto"
tree.write(cheminXML)
if __name__ == "__main__":
majXML(cheminXML)
The new tag value is printed as it should. When I open my xml file, the filename value is "toto".
However, the new tag and its value are not written in the file.
Why is that ?