2014-09-11 58 views
-2

必须删除除一个之外的所有子元素(SimpleData name =“NAME”)。Python删除除一个之外的所有子元素

所以我想保持。

<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

哪一个你喜欢保留 – 2014-09-11 07:21:43

回答

0

您可以使用lxmlElement.remove()删除单个元素。

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) 
+0

谢谢..如何从XML文件读取?我尝试使用minidom.parse来解析xml文件,但似乎不起作用 – KornholioBeavis 2014-09-11 08:09:10

+0

获取错误XMLSyntaxError:属性实例的规范任务值,第1行,列34 – KornholioBeavis 2014-09-11 08:17:49

+0

1)要解析文件,请替换etree.XML(... )'用'etree.parse('filename.xml')'替换文件名,当然。 2)我的例子使用'lxml'。我没有使用'minidom'的例子。如果需要'minidom',请将该信息添加到问题中。 3)'XMLSyntaxErrror'意味着输入文件不是有效的XML。 XML中的错误可以在XML文本第一行的第34个字符中找到。 – 2014-09-11 14:23:30

相关问题