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



我有一个像这样的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>

@#$%&*!是怎么回事?

好了,我来回答我自己的问题。

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

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

相关内容

  • 没有找到相关文章

最新更新