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

, которого вы любите держать –

ответ

0

Вы можете использовать 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) 
+0

Спасибо .. Как насчет чтения из XML-файла? Я попытался использовать minidom.parse для анализа XML-файла, но, похоже, не работает – KornholioBeavis

+0

Ошибка получения XMLSyntaxError: значение мандата спецификации для экземпляра атрибута, строка 1, столбец 34 – KornholioBeavis

+0

1) Для анализа файла замените 'etree.XML (...) 'с' etree.parse ('filename.xml') ', заменив имя файла, конечно. 2) В моем примере используется 'lxml'. У меня нет примера с использованием 'minidom'. Если 'minidom' является требованием, добавьте эту информацию в вопрос. 3) 'XMLSyntaxErrror' означает, что входной файл недействителен XML. Ошибка в вашем XML может быть найдена в 34-м символе первой строки вашего XML-текста. –

Смежные вопросы