python elementTree,将新元素附加到解析的xml文件没有任何效果,没有错误

时间:2017-09-27 18:31:32

标签: python xml elementtree

我已经阅读了尽可能多的相关帖子,但我们都没有帮助过。我有一个简单的xml文件,我需要添加一个新元素(look_1)作为另一个元素的子元素(看起来)。 我似乎无法让xml格式在这里工作,所以树看起来像这样:

AssetRoot
    info_Materials
        Looks/
    /info_Materials
/AssetRoot

目标是产生这个:

AssetRoot
    info_Materials
        Looks
            look_1
                (additional elements from a future script)
            /look_1
        /Looks
    /info_Materials
/AssetRoot

我有以下脚本,它不会抛出任何错误,但似乎也没有对文件做任何事情。

   def editXML(filename):

        print 'editing xml file...'
        tree = xml.parse(filename)
        root = tree.getroot()

        looks = root.findall('.//Looks')
        print looks

        look_1 = xml.Element('Look_1')
        look_1.text = 'foobar'
        looks.append(look_1)


         with open(filename, 'w') as fn:
         print 'writing xml file...'
         tree.write(fn)
         print 'file write successful'


    if __name__ == '__main__':

    editXML(assetInfo)

我可以确认外观= root.findall(' .//外观')找到正确的元素,如果我打印'看起来'。如果我理解正确,element.findall()的结果不是指向元素而是指向元素的值?那么如何获得实际元素以便操作呢?如果我追加' look_1'到了' root'而不是“看”'它有效,所以我的问题是如何将新元素添加到嵌套的子元素

从我的阅读中我了解到lxml会使这很简单,但我不必包含其他依赖项。

编辑:我做了一些改写,发现以下工作:

def editXML(filename):

    print 'editing xml file...'
    tree = xml.ElementTree(file=filename)
    root = tree.getroot()
    looks = root[2][1]

    look_1 = xml.Element('Look_1')
    look_1.text = 'foobar'
    looks.append(look_1)

    with open(filename, 'w') as fn:
        print 'writing xml file...'
        tree.write(fn)
        print 'file write successful'


if __name__ == '__main__':

    editXML(assetInfo)

它可能不是最优雅的解决方案,但它应该适合我的目的,如果有人有更好的解决方案,我有兴趣知道。感谢。

1 个答案:

答案 0 :(得分:0)

要关闭主题,我会将其标记为已回答,如我的编辑中所述,这是我提出的解决方案。

def editXML(filename):

    print 'editing xml file...'
    tree = xml.ElementTree(file=filename)
    root = tree.getroot()
    looks = root[2][1]

    look_1 = xml.Element('Look_1')
    look_1.text = 'foobar'
    looks.append(look_1)

    with open(filename, 'w') as fn:
        print 'writing xml file...'
        tree.write(fn)
        print 'file write successful'


if __name__ == '__main__':

    editXML(assetInfo)