Найти данные по определенному условию в xml
Имеется XML в таком виде:
<old_numbers>
<old_number>
<number_type>
<code>99</code>
<value>Иной номер</value>
</number_type>
<number>408529001</number>
</old_number>
<old_number>
<number_type>
<code>01</code>
<value>Инвентарный номер</value>
</number_type>
<number>10406</number>
</old_number>
<old_number>
<number_type>
<code>03</code>
<value>Кадастровый номер</value>
</number_type>
<number>52-52-01/773/2008-203</number>
</old_number>
<old_number>
<number_type>
<code>02</code>
<value>Условный номер</value>
</number_type>
<number>52-52-01/773/2008-203</number>
</old_number>
</old_numbers>
Помогите пожалуйста найти только "10406", это "Инвентарный номер", по условию поска "code - 01".
Мой код:
def number_type():
number_type = soup.find_all('number_type')
for f in number_type:
code = f.select('code')
for j in code:
if j.text == '01':
return j
def old_number(old_number):
for value in old_number:
if number_type():
number_d = value.find_all('number')
print(number_d)
number = old_number(soup.find_all('old_number'))
Ответы (2 шт):
Автор решения: Namerek
→ Ссылка
from bs4 import BeautifulSoup as Soup
xml_content = """<old_numbers>
<old_number>
<number_type>
<code>99</code>
<value>Иной номер</value>
</number_type>
<number>408529001</number>
</old_number>
<old_number>
<number_type>
<code>01</code>
<value>Инвентарный номер</value>
</number_type>
<number>10406</number>
</old_number>
<old_number>
<number_type>
<code>03</code>
<value>Кадастровый номер</value>
</number_type>
<number>52-52-01/773/2008-203</number>
</old_number>
<old_number>
<number_type>
<code>02</code>
<value>Условный номер</value>
</number_type>
<number>52-52-01/773/2008-203</number>
</old_number>
</old_numbers>"""
soup = Soup(xml_content, 'lxml')
soup.find('code', text='01').find_next('number').get_text()
Автор решения: Сергей Ш
→ Ссылка
from bs4 import BeautifulSoup
xml = '''<old_numbers>
<old_number>
<number_type>
<code>99</code>
<value>Иной номер</value>
</number_type>
<number>408529001</number>
</old_number>
<old_number>
<number_type>
<code>01</code>
<value>Инвентарный номер</value>
</number_type>
<number>10406</number>
</old_number>
<old_number>
<number_type>
<code>03</code>
<value>Кадастровый номер</value>
</number_type>
<number>52-52-01/773/2008-203</number>
</old_number>
<old_number>
<number_type>
<code>02</code>
<value>Условный номер</value>
</number_type>
<number>52-52-01/773/2008-203</number>
</old_number>
</old_numbers>'''
soup = BeautifulSoup(xml, "lxml")
# 1
number_type = soup.find_all('old_number')
for x in number_type:
if x.find("code").text == '01':
print(x.find('value').text, x.find('number').text)
# 2
for x in number_type:
code, value, number = x.stripped_strings
if code == '01':
print(value, number)