2014-09-11 71 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

相關問題