Python minidom:#text节点在将其附加到新父节点时消失

时间:2016-08-09 19:54:06

标签: python xml minidom

我的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>

@#$%&*!正在进行什么?

1 个答案:

答案 0 :(得分:0)

好吧,我在这里,回答我自己的问题。

appendChild()函数<para>节点列表中删除子节点,因此当索引与每个节点不同步时,您将有效地跳过其他所有元素迭代。解决方案是附加节点的副本

for p in para.childNodes:
    p_copy = p.cloneNode(deep=True)
    foo_node.appendChild(p_copy)