2010-07-12 17 views
5

Mevcut öğelere öznitelikleri ekleme, öğeleri kaldırma, vb lxml ile

from lxml import etree 

tree = etree.parse('test.xml', etree.XMLParser()) 

kullanarak XML'de ayrıştıyorum Şimdi ayrıştırılmış XML üzerinde çalışmak istiyorum. Öğeleri ad alanlarıyla veya genel olarak

<rdf:description><dc:title>Example</dc:title></rdf:description> 

gibi öğelerle kaldırma konusunda sorun yaşıyorum ve etiketin içindeki tüm öğelerin yanı sıra tüm öğeyi kaldırmak istiyorum. Ayrıca, mevcut öğelere de nitelikler eklemek istiyorum. İhtiyacım olan yöntemler Element sınıfındadır, ancak ElementTree nesnesinde bunun nasıl kullanılacağını bilmiyorum. Herhangi bir işaretçi kesinlikle takdir edilecektir, teşekkürler

cevap

14

Bu çağrı yoluyla kök elemana alabilirsiniz:, sen findall() kullanmak ve ölçütlerle eşleşen öğeleri kaldırmak anlamına kök öğesi kullanmak root=tree.getroot()

:

deleteThese = root.findall("title") 
for element in deleteThese: root.remove(element) 
İşte

etree.tostring(root, pretty_print=True)/findall iş bulmak konusunda bazı bilgiler verilmiştir: Buna benzer

Son olarak, yeni ağaç benzediğini görebilirsiniz http://infohost.nmt.edu/tcc/help/pubs/pylxml/class-ElementTree.html#ElementTree-find

, bir öğeye bir özelliği eklemelerini böyle bir şey denemek için:

root.attrib['myNewAttribute']='hello world' 
+0

i korkak etiketleri bulacağını nasıl bir fikrin böyle olarak mı? – axsuul

+0

@axsuul Funky etiketlerini nasıl ekleyeceğinizi düşündünüz mü? –

+0

@ShreedharManek bu projeden bu yana çok uzun zaman oldu. Hatırlamıyorum! – axsuul

1

remove yöntem istediğini yapmalıdır:

>>> from lxml import etree 
>>> from StringIO import StringIO 

>>> s = '<Root><Description><Title>foo</Title></Description></Root>' 
>>> tree = etree.parse(StringIO(s)) 

>>> print(etree.tostring(tree.getroot())) 
<Root><Description><Title>foo</Title></Description></Root> 

>>> title = tree.find('//Title') 
>>> title.getparent().remove(title) 
>>> etree.tostring(tree.getroot()) 
'<Root><Description/></Root>' 

>>> print(etree.tostring(tree.getroot())) 
<Root><Description/></Root> 
İlgili konular