Не получается вывод XML как ожидалось - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть Python3, и я следую этому уроку XML, https://docs.python.org/3.7/library/xml.etree.elementtree.html

Я хочу вывести список всех DailyIndexRatio

DailyIndexRatio {'CUSIP': '912810FD5','IssueDate': '1998-04-15', 
'Date':'2019-03-01','RefCPI':'251.23300','IndexRatio':'1.55331' }
 ....

Вместо этого мой код выводит

DailyIndexRatio {}
 ....

Как исправить?

Вот код

import xml.etree.ElementTree as ET

tree = ET.parse('CPI_20190213.xml')
root = tree.getroot()

print(root.tag)
print(root.attrib)

for child in root:
    print(child.tag,child.attrib)

И я скачал xml файл с https://treasurydirect.gov/xml/CPI_20190213.xml

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019
import xml.etree.ElementTree as ET

tree = ET.parse('CPI_20190213.xml') # Load the XML
root = tree.getroot() # Get XML root element
e = root.findall('.//DailyIndexRatio') # use xpath to find relevant elements
# for each element
for i in e:
    # create a dictionary object.
    d = {}
    # for each child of element
    for child in i:
        # add the tag name and text value to the dictionary
        d[child.tag] = child.text
    # print the DailyIndexRatio tag name and dictionary
    print (i.tag, d)

Выходы:

DailyIndexRatio {'CUSIP': '912810FD5', 'IssueDate': '1998-04-15', 'Date': '2019-03-01', 'RefCPI': '251.23300', 'IndexRatio': '1.55331'}
DailyIndexRatio {'CUSIP': '912810FD5', 'IssueDate': '1998-04-15', 'Date': '2019-03-02', 'RefCPI': '251.24845', 'IndexRatio': '1.55341'}
DailyIndexRatio {'CUSIP': '912810FD5', 'IssueDate': '1998-04-15', 'Date': '2019-03-03', 'RefCPI': '251.26390', 'IndexRatio': '1.55351'}
DailyIndexRatio {'CUSIP': '912810FD5', 'IssueDate': '1998-04-15', 'Date': '2019-03-04', 'RefCPI': '251.27935', 'IndexRatio': '1.55360'}
...
0 голосов
/ 17 февраля 2019

Вы печатаете атрибуты, но этот элемент не имеет никаких атрибутов.

Это элемент с атрибутами:

<element name="Bob" age="40" sex="male" />

Но элемент, который вы пытаетесь распечататьнет тех.Имеет дочерних элементов :

<element>
    <name>Bob</name>
    <age>40</age>
    <sex>male</sex>
</element>
...