#python #python-3.x #xml #xml-attribute
#python #python-3.x #xml #xml-атрибут
Вопрос:
Я хочу получить текстовое значение каждого дочернего элемента, у которого есть один, и каждое значение атрибута каждого дочернего элемента, у которого есть один. Я могу получить текстовые значения, но у меня возникают проблемы с получением значений атрибутов одно за другим и присвоением каждого переменной.
У меня есть следующий XML-файл:
<Transactions>
<CardAuthorisation xmlns:xsi="http://...">
<RecType>ADV</RecType>
<AuthId>60874046</AuthId>
<LocalDate>202008010000</LocalDate>
<SettlementDate>202008</SettlementDate>
<Card productid="16" PAN="64256700991593" product="MC" programid="AUST" branchcode="" />
</CardAuthorisation>
</Transactions>
У меня есть следующий код:
import xml.etree.ElementTree as et
xFile = "test.XML"
xtree = et.parse(xFile)
xRoot = xtree.getroot()
for cardAuthorisation in xRoot.findall('CardAuthorisation'):
recType = cardAuthorisation.find('./RecType').text
authId = cardAuthorisation.find('./AuthId').text
localDate = cardAuthorisation.find('./LocalDate').text
settlementDate = cardAuthorisation.find('./SettlementDate').text
#here is where I am having trouble with
#pseudocode
for every attribute in Card:
card_productid = #the value of productid if not None else None
.
.
.
branchcode = #the value of branchcode if not None else None
Я впервые работаю с XML-файлами, я провел много исследований, но ни один из них не соответствует моему варианту использования. Любая помощь была бы высоко оценена, заранее спасибо.
Ответ №1:
Чтобы получить все <Card>
теги и каждый атрибут / значение <Card>
, вы можете сделать:
for c in cardAuthorisation.findall('Card'):
for k, v in c.items():
print(k, v)
С принтами:
productid 16
PAN 64256700991593
product MC
programid AUST
branchcode
Комментарии:
1. большое вам спасибо @Andrej Kesely, оба ваших ответа решают проблему, вы сэкономили мне так много времени :). У меня не было решения, теперь у меня есть два, пожалуйста, выберите его между вами двумя, если я поставлю галочку по стандарту FIFO или если я должен помочь участнику uprising stackoverflow :). Еще раз спасибо!
Ответ №2:
Вы можете получить доступ к атрибутам элемента «Card» следующим образом:
card = cardAuthorisation.find('./Card')
for key in card.keys():
print(key, card.get(key))
Комментарии:
1. большое вам спасибо @Alexandra Dudkina, оба ваших ответа решают проблему, вы сэкономили мне столько времени :). У меня не было решения, теперь у меня есть два, пожалуйста, выберите его между вами двумя, если я поставлю галочку по стандарту FIFO или если я должен помочь участнику uprising stackoverflow :). Еще раз спасибо!