Вы должны использовать xml.dom.minidom
?Потому что это та вещь, в которой сияет XPath.Например, используя lxml.etree
, можно найти все нужные элементы:
my_elements = document.xpath("//data[not(*[.='test'])]")
DOM W3C действительно трудно использовать для реальных задач, поскольку он не включает в себя простые вещи, такие какатрибут, возвращающий значение элемента.(XPath объявляет, что значением элемента являются все его дочерние текстовые узлы, соединенные вместе, поэтому вышеприведенный шаблон работает.)
Вам потребуется реализовать вспомогательную функцию для такого рода вещей, например:
def element_text(e):
return "".join(t.nodeValue for t in e.childNodes if t.nodeType == Node.TEXT_NODE)
Это упрощает создание функции фильтра, например:
def element_is_of_interest(e):
return not any((c for c in e.childNodes if element_text(c) == "test"))
, и вы получаете такие элементы следующим образом:
my_elements = filter(element_is_of_interest, d.getElementsByTagName("data"))