如何使用Python从elementMree中读取xml中的行?

时间:2012-01-25 18:00:13

标签: python xml

我是使用Python的新手,现在我使用ElementTree时遇到问题,并使用此结构从xml读出值:

<entry number="47" date="2011-01-29">
    <name>Swedbank-taxe</name>
    <row account="1930" debit="0" credit="16712"/>
    <row account="8415" debit="1781" credit="0"/>
    <row account="2734" debit="14931" credit="0"/>
</entry>
<entry number="48" date="2011-01-29">
    <name>Agri - Calcium</name>
    <row account="1930" debit="0" credit="2000"/>
    <row account="1471" debit="400" credit="0"/>
    <row account="4370" debit="1600" credit="0"/>
</entry>

使用此代码,我尝试使用label="row"打印出每行的内容:

from tkinter import filedialog
from xml.etree.ElementTree import ElementTree as ET
xmltree = ET()
filval=filedialog.askopenfilename()
xmltree.parse(filval)
konton = xmltree.getiterator('row')
for i in konton:
    print (i.text)

但唯一的打印输出是None

你知道我做错了什么吗? 另外,我想用account="1930"打印每一行。在这种情况下,我想打印出这样的:

1930
1930

2 个答案:

答案 0 :(得分:2)

from tkinter import filedialog
from xml.etree.ElementTree import ElementTree as ET
xmltree = ET()
filval=filedialog.askopenfilename()
xmltree.parse(filval)
konton = xmltree.getiterator('row')
for i in konton:
    # remove this to print the account from every row
    if i.attrib['account'] == "1930":
        print (i.attrib['account'])

答案 1 :(得分:2)

您所犯的错误在于您尝试通过查看其文字来访问元素属性。

正如official ElementTree documentation Element.text 中所述,包含在元素标记之间找到的任何文本,这意味着在<row>this is the text in "text"</row>中。

如果要访问名为account的元素的属性row,则需要调用Element.attrib包含元素属性的字典:< / p>

for i in xmltree.getiterator('row'):
    account = i.attrib['account']
    if account == '1930':
        print('account')

注意:自版本2.7(或3.2)以来,不推荐使用getiterator:请改用方法ElementTree.iter()