通过python更改多个文件的xml属性名称

时间:2016-07-28 16:17:58

标签: python xml

我想在多个文件中更改xml元素的属性名称。这些文件是图像注释工具的输出。我有1000个这样的文件,因此这些属性名称的位置不是绝对的。

我的文件位于[XML FILE] [1]。

我想改变

 <attribute dynamic="false" name="Multiset Column Chart with Error Bars " type="http://lamp.cfar.umd.edu/viperdata#bbox"/>

<attribute dynamic="false" name="Column Chart " type="http://lamp.cfar.umd.edu/viperdata#bbox"/>

<attribute name="Multiset Column Chart with Error Bars "/>

<attribute name="Column Chart "/>

到目前为止,我可以在第一个被剪切为

的代码中访问该元素
root=xmldoc.getroot()
print(root[0][0][11].attrib)

但不确定此名称“带错误条的多重柱形图”将始终位于[0] [0] [11]位置。

所以,我不知道如何访问这些特定名称,并且可以更改上面显示的名称值。

任何帮助将不胜感激。

结束注释

我不得不删除源xml文件的链接,因为这个文件是我研究项目的一部分。

2 个答案:

答案 0 :(得分:1)

我假设你的xml文件的结构与

相同
<?xml version="1.0" encoding="UTF-8"?>
<viper xmlns="http://lamp.cfar.umd.edu/viper#" xmlns:data="http://lamp.cfar.umd.edu/viperdata#">
    <config>
        <descriptor name="Desc0" type="OBJECT">
            <attribute dynamic="false" name="Reflexive Bar Chart " type="http://lamp.cfar.umd.edu/viperdata#bbox"/>

等等。

您可以选择标记attribute并为此标记设置如下属性:

import xml.etree.ElementTree as ET
tree = ET.parse('contents.xml').getroot()
print tree.tag, tree.text
for child in tree[0][0]:
    print child.set("name","bhansa")
    print child.attrib #just to check whether changed or not

然后在xml文件中写入更改

tree.write("file_name")

对xml和python

有一个很好的阅读here

答案 1 :(得分:1)

与bhansa解决方案略有不同。我需要一些if else子句来检查名称,然后替换某些条件的名称。

root=xmldoc.getroot()
#print(root[0][0])
for child in root[0][0]:
    if(child.get('name') == 'Coulmn Chart with Error Bars '):
      child.set("name","Column Chart")
    print (child.attrib) #just to check whether changed or not