Я пытаюсь извлечь элементы из системы архивов парламента Великобритании, Hansard. Но xml не очень хорошо отформатирован. Например, он имеет следующую структуру: housecommons/debates/section/section/data housecommons/speeches/section/section/data housecommons/section/section/data
У меня есть код, который может получить данные, как показано ниже. Однако это приводит к дублированию значений. Я думаю, причина в том, что мой код не учитывает родительско-дочерние отношения и вместо этого просто ищет каждый маркер «раздела», следующий за первым маркером.
Может ли кто-нибудь посоветовать, как я могу адаптировать свой код, чтобы избежать дублирования?
doc = ET.parse(xmlFile)
for house in doc.iter('housecommons'):
#print ('housecommon', house.tag)
for debates in house.iter('debates'):
print ('debates')
#print (title)
for section in debates.iter('section'):
#print ("debates section", section.text)
#title = ("title", section.find('title').text)
print('debate section')
for subsection in debates.iter('section'):
print("debate subsection", subsection.text)
#title = ("title", subsection.find('title').text)
#print(title)
н.б. это тип вещей в необработанном xml, который я пытаюсь разобрать. Без публикации полного XML-файла сложная структура может быть не полностью очевидна.
<housecommons>
<image src="S6CV0001P0I0103"/>
<col>181</col>
<title>House of Commons</title>
<date format="1981-03-17">Tuesday 17 March 1981</date>
<p id="S6CV0001P0-00854"><i>The House met at half-past Two o'clock</i></p>
<debates>
<section>
<title>PRAYERS</title>
<p id="S6CV0001P0-00855">[MR. SPEAKER <i>in the Chair</i>]</p>
<section>
<title>PRIVATE BUSINESS</title>
<section>
<title>CHARTERHOUSE JAPHET BILL</title>
<p id="S6CV0001P0-00856"><i>Bill read the Third time and passed, with amendments.</i></p>
<section>
<title>BARNSLEY BOROUGH COUNCIL BILL</title>
<p id="S6CV0001P0-00857"><i>Further considered; to be read the Third time.</i></p>
</section>
</section>
</section>
</section>
</housecommons>