【发布时间】:2018-04-05 14:04:08
【问题描述】:
<data>
<items>
<item name="item1">....text here</item>
<item name="item2">....another text here</item>
</items>
</data>
我陷入困境。 我有这个xml方案。我需要添加一个带有 (key,value) 的附加块,例如 (name="something") 和文本值。 所以,我需要做这样的事情
<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)
【问题讨论】:
-
对不起,我的错误。修复。将 xml.etree.ElementTree 导入为 ET
-
我不明白。您是否有想要添加新元素的现有 XML 文档?因为那不是“有点解决我的问题”的作用。为什么这个问题被标记为“json”?
-
是的,没错。我需要将一个额外的子元素添加到具有完整结构的现有文件中。即这个文件有一个根(数据),主要子元素(项目)和项目内的子元素(即项目)。当我的程序中出现特殊数据时,它应该将此数据记录到 xml 文件的 item.text 子元素中(如上面的示例)。
标签: python json xml python-3.x elementtree