XML находит все значения атрибутов дочернего тега

#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 :). Еще раз спасибо!