【问题标题】:How to add a subelement in xml如何在xml中添加子元素
【发布时间】: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


【解决方案1】:

我从未见过 a+b 模式。您想创建一个添加了更改的新文件,这意味着 w 或 wb 在您的情况下。您不想追加,因为这只会将新数据添加到您之前文件的末尾。

另外,为什么你需要寻找另一种方法?

【讨论】:

  • sry,我的意思是在我的帖子中'ab' 2 个问题 :) 1) 我只需要添加 ....text here当新数据出现时(在我的情况下,data = 'text')我需要找到一种方法来做到这一点。 2)我是否需要使用'wb'模式来创建一个新文件(或者只是改变文件的内容)而不是通过'ab'模式添加一些信息?如果不可能,我会关闭问题
  • 这个问题看起来和你的差不多。还没有回答,但我会跟踪它:stackoverflow.com/questions/38438921/…
猜你喜欢
  • 2013-10-15
  • 2012-06-14
  • 1970-01-01
  • 2018-12-07
  • 2018-04-28
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多