我已经阅读了尽可能多的相关帖子,但我们都没有帮助过。我有一个简单的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)
它可能不是最优雅的解决方案,但它应该适合我的目的,如果有人有更好的解决方案,我有兴趣知道。感谢。
答案 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)