python elementTree,将新元素附加到已解析的xml文件没有任何影响,没有错误
问题描述:
我已经阅读了尽可能多的相关文章,但我找不到它们,但都没有帮助。我有一个简单的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)
它也许不是最完美的解决方案,但它应该工作对于我而言,如果任何人有一个更好的解决方案我有兴趣知道。谢谢。
答
要关闭线程,我会将其标记为已回答,正如我的编辑所述,这是我提出的解决方案。
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)
“findall”的文档说它返回一个列表....你需要做一些类似'looks [0] .append(look_1)'的事情吗? – user