Получать данные из xml, используя ElementTree в Python - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь извлечь некоторые данные из XML-файла.Ниже приведен пример того, как выглядит XML.

<?xml version="1.0" encoding="UTF-8"?>
<Stores>
  <Store>
<Action>new</Action>
<StoreID>1001</StoreID>
<EmpID/>
<Agent>
  <Name/>
  <EmpName>Scott</EmpName>
</Name>
<BillData>
  <BillInfo>
    <Action>new</Action>
    <CustName></CustName>
    <BillNumber>3343</BillNumber>
   </BillInfo>
  </BillData>
 </Store>
</Stores>

Я пытаюсь получить каждый из столбцов вместе с данными из вышеуказанного набора данных.Ниже приведено то, чего я достиг к настоящему моменту:

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
    for elem in root:
        for subelem in elem:
        print(subelem.tag)
        print(subelem.text)

Вывод такой, как показано ниже:

Action
new
StoreID
1001
Agent


BillData

Я пытаюсь извлечь данные, которые находятся на дочернем уровне.Может ли кто-нибудь посоветовать, как я могу извлечь данные, хранящиеся в "BillInfo", а именно

Action
new
CustName
BillNumber
3343

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Простая рекурсивная функция, которая достигает того, что вы хотите:

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
search(root)

def search(elem):
    for e in elem:
        print(e.tag)
        print(e.text)
        search(e)
0 голосов
/ 27 ноября 2018

Если вы хотите рекурсивно перебирать все элементы в дереве XML, вы должны использовать метод iter .Что-то вроде следующего должно получить желаемое:

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
for elem in tree.iter():
    print(elem.tag)
    print(elem.text)
...