Python 删除所有子元素,保留一个

-3 投票
1 回答
1939 浏览
提问于 2025-04-21 01:14

我需要删除所有子元素,除了一个叫做(SimpleData name="NAME")的元素。

所以我想保留这个元素。

<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#osa_20140910_areas">
    <SimpleData name="gml_id">219</SimpleData>
    <SimpleData name="ID">219</SimpleData>
    <SimpleData name="CODE">520</SimpleData>
    <SimpleData name="DISTRICT">102</SimpleData>
    <SimpleData name="STOR_DISTRICT">1</SimpleData>
    <SimpleData name="COUNTY">91</SimpleData>
    <SimpleData name="WHOLE_CODE">911102520.000000000000000</SimpleData>
    <SimpleData name="NAME">Calgary</SimpleData>
</SchemaData></ExtendedData>

非常感谢任何帮助。

1 个回答

1

你可以使用 Element.remove() 这个方法,来自 lxml 库,来删除单个元素。

from lxml import etree

tree = etree.XML('''<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#osa_20140910_areas">
    <SimpleData name="gml_id">219</SimpleData>
    <SimpleData name="ID">219</SimpleData>
    <SimpleData name="CODE">520</SimpleData>
    <SimpleData name="DISTRICT">102</SimpleData>
    <SimpleData name="STOR_DISTRICT">1</SimpleData>
    <SimpleData name="COUNTY">91</SimpleData>
    <SimpleData name="WHOLE_CODE">911102520.000000000000000</SimpleData>
    <SimpleData name="NAME">Calgary</SimpleData>
</SchemaData></ExtendedData>
</Placemark>''')
print tree
for simple_data in tree.xpath('//SimpleData[@name!="NAME"]'):
  simple_data.getparent().remove(simple_data)

print etree.tostring(tree)

撰写回答