使用xml.etree.ElementTree查找XML标签并在Python3中的特定位置插入新标签

时间:2019-01-24 05:36:40

标签: python-3.x xml-parsing

我有一个以下格式的示例文件。

原始XML数据:

<nametag dummy1 ="YES" dummy2 ="PASS THROUGH" >
            <PARTITION DESCRIPTION ="" NAME ="Partition #1"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #2"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #3"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #4"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #5"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #6"/>

</nametag>

目标:

<nametag dummy1 ="YES" dummy2 ="PASS THROUGH" >
            <PARTITION DESCRIPTION ="" NAME ="Partition #1"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #2"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #3"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #4"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #5"/>
            <PARTITION DESCRIPTION ="" NAME ="Partition #6"/>
<newtag value=1 value=2/>
</nametag>

我能够通过整个文档并找到,甚至能够通过标签传递。我的要求是找到最后一个标签,并添加一个新的标签元素,如上面给出的Target xml中所述。订单项的数量并不总是相同的,因此通过固定的迭代进行循环将不起作用。

我将不得不找到最后一个标签,然后在其后插入“”。

需要查找其最后一个标签。 我能够使用类似于以下代码的代码来解析xml文件。

import xml.etree.ElementTree as ET
tree = ET.parse('some.xml')
root = tree.getroot()
for partition in root.iter('PARTITION'):
    partitiondetail = partition.get('NAME')
    if partitiondetail == 'somepattern':
        print(partitiondetail)

1 个答案:

答案 0 :(得分:0)

这解决了我的问题。

for element in root.iter('nametag'):
    new_subelement = ET.Element("newtag", value1 ="1", value2="2")
    element.append(new_subelement)

tree.write('output.xml')

这会将所需的xml数据写入一个新文件中。