python,将SubElement添加到XML文件的结构中

时间:2013-03-18 14:24:05

标签: python xml windows

我想使用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文件的函数?我会非常,非常感谢:)。

问候: - )

0 个答案:

没有答案