2017-09-27 40 views
0

我已经阅读了尽可能多的相关文章,但我找不到它们,但都没有帮助。我有一个简单的xml文件,我需要添加一个新元素(look_1)作为另一个元素的子元素(Looks)。 我似乎无法获得XML格式使树看起来像这样的东西在这里工作:python elementTree,将新元素附加到已解析的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'而不是'look'看起来有效,那么我的问题是如何将一个新元素添加到嵌套的子元素

从我的阅读中我明白了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) 

它也许不是最完美的解决方案,但它应该工作对于我而言,如果任何人有一个更好的解决方案我有兴趣知道。谢谢。

+2

“findall”的文档说它返回一个列表....你需要做一些类似'looks [0] .append(look_1)'的事情吗? – user

回答

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) 
相关问题