Вы можете использовать BeautifulSoup .
. Используйте BeautifulSoup()
для создания BeautifulSoup
объекта из строковой версии входного XML.
from bs4 import BeautifulSoup
soup = BeautifulSoup(x, "xml")
Второй аргумент BeautifulSoup()
определяет синтаксический анализатор.См. this .
Теперь давайте создадим переменную n
, в которой будет найдено значение, которое в приведенном вами примере равно 1
.
n = 1
Используйте find_all()
, чтобы перебрать все теги, присутствующие в soup
.
for t in soup.find_all():
....
Теперь используйте has_attr()
, чтобы увидеть, есть ли у тега атрибут с именем 'condition'
.
if t.has_attr('condition'):
....
Если такой атрибут существует, мы можем получить его значение с помощью t['condition']
.Разделите полученную таким образом строку, чтобы получить из нее целые числа (предполагая, что это целое число, которое вы хотите), чтобы получить список операндов.if x.isdigit()
используется для избавления от and
, or
и т. Д.
operand_list = [int(x) for x in t['condition'].split() if x.isdigit()]
Если n
отсутствует в списке операндов, удалите тег из дерева XML с помощью decompose()
.
if n not in operand_list:
t.decompose()
После окончания цикла напечатаем результирующий XML, отформатированный с использованием функции prettify()
:
print(soup.prettify())
Piecingвместе все части, окончательная программа будет
n = 1
for t in soup.find_all():
if t.has_attr('condition'):
operand_list = [int(x) for x in t['condition'].split() if x.isdigit()]
if n not in operand_list:
t.decompose()
print(soup.prettify())
Выход будет
<book>
<chapter condition="1 or 2" id="hi">
Item 3
</chapter>
<chapter condition="1" id="hi">
Item 2
</chapter>
<title title="Test">
Item 1
</title>
</book>