我的XML看起来像这样:
<example>
<para>
<phrase>child_0</phrase>
child_1
<phrase>child_2</phrase>
</para>
</example>
我希望它看起来像这样:
<foo>
<phrase>child_0</phrase>
child_1
<phrase>child_2</phrase>
</foo>
简单,对吧?我创建了一个新的父节点 - <foo>
- 然后遍历<para>
节点并将子节点附加到新的<foo>
节点。
当我尝试这样做时,child_1
(文本节点)消失了,这很奇怪。如果我只是遍历<para>
节点,我会得到:
>>> for p in para.childNodes:
print p.nodeType
1
3
1
因此有3个子节点,中间一个是文本节点。但是当我尝试将其附加到新的<foo>
节点时,它并没有成功。
>>> for p in para.childNodes:
foo_node.appendChild(p)
>>> print foo_node.toprettyxml()
<foo>
<phrase>child_0</phrase>
<phrase>child_2</phrase>
</foo>
@#$%&*!
正在进行什么?
答案 0 :(得分:0)
好吧,我在这里,回答我自己的问题。
appendChild()
函数从<para>
节点列表中删除子节点,因此当索引与每个节点不同步时,您将有效地跳过其他所有元素迭代。解决方案是附加节点的副本:
for p in para.childNodes:
p_copy = p.cloneNode(deep=True)
foo_node.appendChild(p_copy)