Найти - Пользователи
Полная версия: Ошибка при удалении узла xml
Начало » Python для новичков » Ошибка при удалении узла xml
1
worsvch
Подскажите, пожалуйста, как быть, при выполнении функции remove выходит ошибка,которую никак не удается победить:
ValueError: list.remove(x): x not in list

#!/python
# -*- coding: utf-8 -*-
import os
import glob
import csv
import xml.etree.ElementTree as xml
csvdata = 'Список запчастей.csv'
tag = 'zapchast'
zapchasty_list = []
# сохраняем запчасти в список
with open(csvdata,'r',newline='') as csvfile:
    zplist = csv.reader(csvfile,delimiter=';')
    for row in zplist:
        zapchasty_list.append(row[0])        
        
xmlfiles = glob.glob("*.xml")        
for xmlfile in xmlfiles:
    tree = xml.parse(xmlfile)
    root = tree.getroot()
    for obj in root.findall('.//Zapchast'):
        zpch = obj.get('InvNumber')
        if zpch in zapchasty_list:
            root.remove(obj)
py.user.next
worsvch
'.//Zapchast'
Это поиск на любой глубине, тогда как root.remove() будет искать только среди прямых потомков.

Когда что-то непонятно, выполняй print() в промежутках, так как может получаться неожиданная структура документа.
Поэтому здесь тоже нужно всё проверить: сначала сразу после создания корневого узла вывести его на экран; затем отдельно root.findall() вывести на экран (чтобы убедиться, что находит правильно).
worsvch
py.user.next
1. Корневой узел выходит верно
2. Это поиск на любой глубине, тогда как root.remove() будет искать только среди прямых потомков. - можно на примере, а то не совсем понятно
py.user.next
>>> import xml.etree.ElementTree as ET
>>> 
>>> doc = ET.fromstring('<a><b><c></c></b></a>')
>>> doc
<Element 'a' at 0xb73c0dec>
>>> list(doc)
[<Element 'b' at 0xb73ea16c>]
>>> list(doc[0])
[<Element 'c' at 0xb73de694>]
>>>
>>> c = doc[0][0]
>>> c
<Element 'c' at 0xb73de194>
>>> doc.remove(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB