如何在xml中添加子元素

时间:2018-04-05 14:04:08

标签: python json xml python-3.x elementtree

<data>
    <items>
        <item name="item1">....text here</item>
        <item name="item2">....another text here</item>
    </items>
</data>
我被卡住了。 我有这个xml方案。我需要添加一个带有(键,值)的附加块,如(name =&#34; something&#34;)和文本值。 所以,我需要做这样的事情

 <item name="item3">text here</item>

我知道,我可以这样做:

import xml.etree.ElementTree as ET
data = ET.Element('data')
items = ET.SubElement(data, 'items')
item1 = ET.SubElement(items, 'item')
item2 = ET.SubElement(items, 'item')
item1.set('name','item1')
item2.set('name','item2')
item1.text = 'another text here...'
item2.text = '...text here'
myExample = ET.SubElement(items, 'item')
myExample.set('name', 'For example')
myExample.text = 'for instance, its a string'


mydata = ET.tostring(data)
myfile = open("items2.xml", "wb")
myfile.write(mydata)

但我需要找到另一种方法才能做到这一点。 而且,我想弄明白如何将它添加到我的xml文件中。我需要重写文件还是?...

myfile = open("items2.xml", "a+b")
myfile.write(mydata)

将结果添加到另一个字符串中..它会导致xml中的错误。

我提出了一种解决我问题的方法。

import xml.etree.ElementTree as ET
data = ET.Element('data')
items = ET.SubElement(data, 'items')

result = iter(['Price: 2250','Price: 1','Price: 2','Price: 3'])
l = [exec("f = ET.SubElement(items, 'item')\nf.set('name', 'order')\nf.text='%s'%next(result)") for _ in range(4)]

mydata = ET.tostring(data)
myfile = open("items2.xml", "wb")
myfile.write(mydata)

1 个答案:

答案 0 :(得分:1)

我从未见过a + b模式。您希望创建一个添加了更改的新文件,这意味着您的案例中包含w或wb。您不想附加,因为这只是将新数据添加到上一个文件的末尾。

另外,为什么还需要找到另一种方法?