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>
test.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)))
会输出
<root>
<item>
<number>01</number>
<step>one</step>
</item>
</root>
根据您的特定用例改编自 a similar answer。
我想删除元素而不是它的子元素。我尝试使用此代码,但我的代码也删除了它的子项。
代码
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>
test.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)))
会输出
<root>
<item>
<number>01</number>
<step>one</step>
</item>
</root>
根据您的特定用例改编自 a similar answer。