python elementtree xml 追加

Ser*_*X44 5 python xml parsing elementtree

我在向 xml 文件添加元素时遇到一些问题

我有一个具有以下结构的 xml:

<Root>
    <Item>
        <ItemId>first</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
        </Datas>
    </Item>
    <Item>
        <ItemId>second</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
        </Datas>
    </Item>
</Root>
Run Code Online (Sandbox Code Playgroud)

我只想在 itemid 为第二时添加数据,并获得如下输出:

<Root>
    <Item>
        <ItemId>first</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
        </Datas>
    </Item>
    <Item>
        <ItemId>second</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
            <Data>FOUR</Data>
            <Data>FIVE</Data>
        </Datas>
    </Item>
</Root>
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

Dyl*_*zzo 4

目前尚不清楚您是否想要如何找到添加元素的位置或如何添加元素本身。

对于这个具体示例,为了查找位置,您可以尝试如下操作:

import xml.etree.ElementTree as ET
tree=ET.parse('xml-file.txt')
root=tree.getroot()

for item in root.findall('Item'):
    itemid=item.find('ItemId')
    if(itemid.text=='second'):
        #add elements
Run Code Online (Sandbox Code Playgroud)

对于实际添加部分,您可以尝试:

new=ET.SubElement(item[1],'Data')
new.text='FOUR'
new=ET.SubElement(item[1],'Data')
new.text='FIVE'
Run Code Online (Sandbox Code Playgroud)

或者

new=ET.Element('Data')
new.text='FOUR'
child[1].append(new)
new=ET.Element('Data')
new.text='FIVE'
child[1].append(new)
Run Code Online (Sandbox Code Playgroud)

还有其他几种方法可以完成这两个部分,但是总的来说,文档非常有用:https://docs.python.org/2/library/xml.etree.elementtree.html

编辑:

如果“Datas”元素更靠下,您可以使用与上面相同的 Element.find() 方法来查找指定标记的第一次出现。(Element.findall() 返回指定标签的所有出现的列表)。

以下应该可以解决问题:

data=item.find('Datas')
new=ET.SubElement(data,'Data')
new.text='FOUR'
new=ET.SubElement(data,'Data')
new.text='FIVE'
Run Code Online (Sandbox Code Playgroud)