我有一个小的XML文件,如下所示:
<cart>
<items>
<item id="1" />
</items>
<items>
<item id="2" />
</items>
</cart>
我希望在<item id = "new item" />
下添加新项<items></items>
。这是我的代码:
doc = minidom.parseString('<cart><items><item id="1" /></items><items><item id="2" /></items></cart>')
newItem = doc.createElement('item')
newItem.setAttribute('id', 'new item')
items = doc.getElementsByTagName('item')
for item in items:
item.parentNode.appendChild(newItem)
print(item.parentNode.toxml())
print(doc.toprettyxml())
注意:我可以使用<items></items>
并使用items.appendChild,但我稍后需要<item></item>
个元素。这就是为什么使用parentNode.appendChild
这是我得到的输出
<items><item id="1"/><item id="new item"/></items>
<items><item id="2"/><item id="new item"/></items>
<cart>
<items>
<item id="1" />
</items>
<items>
<item id="2" />
<item id="new item" />
</items>
</cart>
前两行是循环内print语句的输出。
请注意,新元素未添加到第一个项目块下。但是,for循环中的print语句显示两个items块都添加了新元素,但Document节点&#39; doc&#39;仅显示第二个项目块下的项目。链接到Ideone
上的代码任何关于我做错了什么的帮助?
答案 0 :(得分:1)
您不能在多个地方拥有相同的元素。当您追加到第二个节点时,将从第一个节点中删除newItem。您可以改为复制节点:
doc = minidom.parseString('<cart><items><item id="1" /></items><items><item id="2" /></items></cart>')
newItem = doc.createElement('item')
newItem.setAttribute('id', 'new item')
items = doc.getElementsByTagName('item')
for item in items:
item.parentNode.appendChild(newItem.cloneNode(True))
print(item.parentNode.toxml())
print(doc.toprettyxml())