XPath tarafından Python Elementtree filtreleme
Sep 04 2020
Bunun gibi bir XML aldığımı düşünün:
<root>
<elements>
<element> foo </element>
<element is="false"> foo </element>
<element is="false"> bli </element>
<element is="false"> bla </element>
</elements>
</root>
Bunu nasıl yapabilirim:
import xml.etree.ElementTree as ET
root = ET.fromstring(XmlFromAbove)
res_a = root.findall("element[@is='false']")) ##<- This gives me all elements with the specific attribute
res_b = root.findall("element[not@is='false']")) ##<- This would be nice to give me all elements without that specific attribute (`<element> foo </element>` in this case)
Şimdi, res_bbunun işe yaramayacağını biliyorum ama sanırım bu ortak bir sorun, bu yüzden herhangi birinin bunun için geçici çözümün ne olduğu hakkında bir fikri var mı?
Biraz daha vurgulamak için (yorumlardan kopyalandı)
Kesinlikle "foo" içeren öğeyi bulabilirim, ancak bilmek istediğim şey, = "false" özniteliğini İÇERMEYEN herhangi bir öğeyi bulmanın bir yolu olup olmadığıdır.
Yanıtlar
2 balderman Sep 04 2020 at 17:10
aşağıya bakınız
import xml.etree.ElementTree as ET
xml = '''<root>
<elements>
<element> foo </element>
<element is="false"> foo </element>
<element is="false"> bli </element>
<element is="false"> bla </element>
<element please="false"> no_is </element>
<element is="true"> with_true_is </element>
</elements>
</root>'''
root = ET.fromstring(xml)
no_is_lst = [e for e in root.findall('.//element') if 'is' not in e.attrib]
for e in no_is_lst:
print(e.text)
çıktı
foo
no_is
deadshot Sep 04 2020 at 16:59
Lxml kullanabilirsiniz
from lxml import etree
root = etree.fromstring(data)
res = root.xpath(".//element[not(@is)]")
print(res[0].text) #foo
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'