我想使用Python更新XML文件。
这是我写的一个函数:
def updateXml(self, pathXml, elements):
tree = ET.parse(pathXml)
root = tree.getroot()
updateFile = False
for element in elements:
elementAlreadyExists = False
for child in root:
if child.attrib["name"] == element:
elementAlreadyExists = True
if elementAlreadyExists == False:
updateFile = True
ET.SubElement(root, "Test", {"name": element})
if updateFile == True:
tree.write(pathXml)
问题是,当我在Winodws下打开文件时(例如记事本),文件看起来完全一样......文件根本没有改变......
但是当我用另一个函数读取文件时(readXml - 由我自己编写,但没有必要在这里复制readXml的主体)我可以看到更改...(我的意思是,当我把readXml()在updateXml()的末尾。嗯,我想,当我写tree.parse()时,xml文件只在“r”模式下打开?我不知道如何处理机智,这就是为什么我想变得更聪明,我想做以下技巧(函数末尾的几行 - os.remove()和shutil.copy()):
def updateXml(self, pathXml, elements):
tree = ET.parse(pathXml)
root = tree.getroot()
updateFile = False
for element in elements:
elementAlreadyExists = False
for child in root:
if child.attrib["name"] == element:
elementAlreadyExists = True
if elementAlreadyExists == False:
updateFile = True
ET.SubElement(root, "Test", {"name": element})
if updateFile == True:
tree.write(pathXml + ".temp")
tree = None
root = None
os.remove(pathXml)
shutil.copy(pathXml + ".temp", pathXml)
#os.remove(pathXml + ".temp")
不幸的是,它不起作用... pathXml下的Xml文件仍然是......相同的!怎么可能? 这有什么不对? xml.temp文件看起来没问题......
或者,请你告诉我,如何在“import xml.etree.ElementTree as ET”的帮助下编写一个能够更新xml文件的函数?我会非常,非常感谢:)。
问候: - )