Я обрабатываю XML-файл.Я хочу создать вывод в виде списка кортежей для массовой вставки в базу данных.
проблема, которую я не могу достичь, это вставка @id из узла в выбранные атрибуты дочерних узлов.
Это мой пример док.Обратите внимание, что в моем реальном файле есть намного больше атрибутов на каждом уровне, которые необходимо отфильтровать.Я создал этот XML-файл как более удобный пример.
doc = """
<region id="5153419" name="North Shore" date="2019-02-15T00:00:00" >
<shire abbrevname="Manly Council" code="20019" website="http://" >
<location id="5178566" site="1" division="Dee Why" staff="3" >
<reference isbn="978-1-891830-75-4" rating="Mature (18+)" title="110 Per¢" author="Tony Consiglio"/>
<reference isbn="978-1-60309-2395" rating="Mature (16+)" title="American Elf 1999" author="James Kochalka" />
<reference isbn="978-1-891830-37-2" rating="Young Adult (13+)" title="The Barefoot Serpent (softcover)" author="Scott Morse" />
<reference isbn="978-1-891830-56-3" rating="Mature (16+)" title="Bighead" author="Jeffrey Brown" />
<reference isbn="978-1-891830-19-8" rating="Mature (18+)" title="Box Office Poison" author="Alex Robinson" />
</location>
<location id="5178568" site="2" division="Brookvale" staff="5">
<reference isbn="978-1-891830-37-2" rating="Young Adult (13+)" title="The Barefoot Serpent (softcover)" author="Scott Morse"/>
<reference isbn="978-1-936561-69-8" rating="Adults Only (18+)" title="Chester 5000 (Book 2)" author="Isabelle George" />
<reference isbn="978-1-891830-81-5" rating="Young Adult (13+)" title="Cry Yourself to Sleep" author="Jeremy Tinder" />
<reference isbn="978-1-891830-75-4" rating="Mature (18+)" title="110 Per¢" author="Tony Consiglio" />
<reference isbn="978-1-891830-77-8" rating="Mature (16+)" title="Every Girl is the End of the World for Me" author="Jeffrey Brown" />
<reference isbn="978-0-9585783-4-9" rating="Mature (18+)" title="From Hell" author="Alan Moore and Eddie Campbell" />
</location>
</shire>
</region>
"""
Мой желаемый результат будет
(идентификатор местоположения, isbn, заголовок)
[(5153419, 978-1-891830-75-4,110 Per¢),(5153419, 978-1-60309-2395, American Elf 1999).......(5178568,978-0-9585783-4-9,From Hell)]
Попробовал этомного способов getiterator, findall.Просто не могу найти способ добиться этого.
filter_reference = ['isbn', 'title']
output_list = []
for child in tree.findall('.//reference'):
for k,v in child.items():
if k in filter_reference:
output_list.append(v)