簡體   English   中英

Python:從 xml 中刪除一個元素,但不刪除它的子元素?

[英]Python : Remove an element but not its children from xml?

我想刪除元素但不是它的孩子。 我嘗試使用此代碼,但我的代碼也刪除了它的孩子。

代碼

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>

您應該在刪除之前將項目的所有子item移動到root

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>

找到帶有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)))

將 output

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

改編自針對您的特定用例的類似答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM