Как убрать тег в lxml? - PullRequest
       66

Как убрать тег в lxml?

0 голосов
/ 17 октября 2018

Сначала я следовал за этим вопросом , но у меня все еще есть проблемы с методом удаления.

tag.getparent().remove(tag)

Я использовал этот фрагмент кода для удаления рассматриваемого тега привязки с помощьюатрибуты name = "2" и id = "2" на этой веб-странице

, и когда строка была выполнена, я все еще мог видеть теги его свойства, и когда я перебираю все дочерние элементы, я все еще мог видеть элемент, который я удалил

Что именно делает метод удаления и почему тег, который удаляется, все еще сохраняется?

Этоскриншот отладчика после выполнения строки.

enter image description here

1 Ответ

0 голосов
/ 17 октября 2018

Когда вы удаляете узел из его родителя, сам узел все еще существует, но просто отсоединяется от родителя.Это позволяет добавить «удаленный» узел к другому родителю.Но если вы не добавляете узел к новому родительскому узлу, то этот узел хорош как удаленный с точки зрения корневого узла.

Чтобы сохранить дочерние элементы удаляемого узла тега, вы можете удалитьих родительскому тегу с таким же индексом, как этот:

parent = tag.getparent()
index = parent.index(tag)
for child in tag.getchildren()[::-1]: # in reverse order so that we can keep inserting at the same index while preserving the original order
    tag.remove(child)
    parent.insert(index, child)
parent.remove(tag)

Или вы можете просто использовать метод drop_tag:

tag.drop_tag()
...