мой первый вопросУдалить ребенок XML элемент с определенным атрибутом в питона
Я пытаюсь выяснить дамп базы данных ESHOP продуктов, которые либо не имеют цены или количества установлены. Поэтому я готов только продать продукты. Я пытаюсь сделать это через скрипт python. После того, как сценарий не смог выполнить то, что я намеревался, я попытался создать тестовый скрипт.
входной файл test.xml
<Result >
<StoItem Code="A" Id="1" QtyFree="2" PriceEU="124.5">
<ImgGal />
</StoItem>
<StoItem Code="B" Id="2" QtyFree="2" PriceEU="124.5">
<ImgGal />
</StoItem>
<StoItem Code="C" Id="3" PriceEU="124.5">
<ImgGal />
</StoItem>
<StoItem Code="D" Id="4" QtyFree="2" >
<ImgGal />
</StoItem>
</Result>
Теперь мой скрипт выглядит следующим образом:
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
atb='QtyFree'
for child in root:
print('Checking element no. '+child.attrib['Id'])
if atb in child.attrib:
print('In '+child.attrib['Id']+' found '+atb)
print('deleted '+child.attrib['Id'])
else:
print('In '+child.attrib['Id']+'not found '+atb)
tree.write('output.xml')
Теперь выход правильно определены элементы, которые должны быть удалены, как:
Checking element no. 1
In 1 found QtyFree
deleted 1
Checking element no. 2
In 2 found QtyFree
deleted 2
Checking element no. 3
In 3not found QtyFree
Checking element no. 4
In 4 found QtyFree
deleted 4
Но когда я поместил фактическую функцию удаления в скрипт:
if atb in child.attrib:
print('In '+child.attrib['Id']+' found '+atb)
root.remove(child)
print('deleted '+child.attrib['Id'])
я получаю что-то вроде этого:
Checking element no. 1
In 1 found QtyFree
deleted 1
Checking element no. 3
In 3not found QtyFree
Checking element no. 4
In 4 found QtyFree
deleted 4
И output.xml выглядит следующим образом:
<Result>
<StoItem Code="B" Id="2" PriceEU="124.5" QtyFree="2">
<ImgGal />
</StoItem>
<StoItem Code="D" Id="4" QtyFree="2">
<ImgGal />
</StoItem>
</Result>
Значение, что
1) Удалены правильный элемент
2) Не удаляли правильный элемент
и 3) Удален некорректный элемент
Так что, если кто-нибудь знает, что и где ошибка, я был бы очень рад, Спасибо за ваше время. Я также открыт для критики моего вопроса и что я сделал не так, и что я мог бы сделать лучше.
Спасибо, я люблю тебя – Budbreaker