python:从xml中删除一个元素而不是它的子元素?

yruzcnhs  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(494)

我要删除元素,但不删除其子元素。我尝试了这个代码,但是我的代码也删除了它的子代码。
代码

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

for item in root.findall('item'):
    root.remove(item)

print(ET.tostring(root))
>>> <root>
    </root>

测试.xml

<?xml version="1.0" ?>
<root>
    <item>
        <data>
            <number>01</number>
            <step>one</step>
        </data>
    </item>
</root>

预期结果

<?xml version="1.0" ?>
<root>
    <data>
        <number>01</number>
        <step>one</step>
    </data>
</root>
iq0todco

iq0todco1#

你应该把所有的孩子都搬走 itemroot 拆卸前

for item in root.findall('item'):
    for child in item:
        root.append(child)
    root.remove(item)

print(ET.tostring(root))

代码导致

<root>
   <data>
       <number>01</number>
       <step>one</step>
   </data>
</root>
dwbf0jvd

dwbf0jvd2#

查找具有 data 标记、移除它并用元素的子元素扩展元素的父元素。

import xml.etree.ElementTree as etree

data = """
<root>
    <item>
        <data>
            <number>01</number>
            <step>one</step>
        </data>
    </item>
</root>
"""

tree = etree.fromstring(data)

def iterparent(tree):
    for parent in tree.iter():
        for child in parent:
            yield parent, child

tree = etree.fromstring(data)
for parent, child in iterparent(tree):
    if child.tag == "data":
        parent.remove(child)
        parent.extend(child)

print((etree.tostring(tree)))

将输出

<root>
    <item>
        <number>01</number>
        <step>one</step>
    </item>
</root>

根据您的特定用例的类似答案改编。

相关问题