使用ElementTree解析.config文件中的数据时出错

时间:2015-09-06 18:33:38

标签: python-2.7 elementtree

我试图使用ElementTree从.config文件中获取数据。此文件的结构如下所示:

<userSettings>
        <AutotaskUpdateTicketEstimatedHours.My.MySettings>
            <setting name="Username" serializeAs="String">
                <value>AAA</value>
            </setting>

我的代码是:

import os, sys
import xml.etree.ElementTree as ET


class Init():
    script_dir = os.path.dirname(__file__)
    rel_path = "app.config"
    abs_file_path = os.path.join(script_dir, rel_path) 

    tree = ET.parse(abs_file_path)
    root = tree.getroot()
    sites = root.iter('userSettings')
    for site in sites: 
        apps = site.findall('AutotaskUpdateTicketEstimatedHours.My.MySettings')
        for app in apps:
            print(''.join([site.get('Username'), app.get('value')]))


if __name__ == '__main__':
    handler = Init()

但是,当我运行此代码时,我得到:

Traceback (most recent call last):
  File "/Users/AAAA/Documents/Aptana/AutotaskUpdateTicketEstimatedHours/Main.py", line 5, in <module>
    class Init():
  File "/Users/AAA/Documents/Aptana/AutotaskUpdateTicketEstimatedHours/Main.py", line 16, in Init
    print(''.join([site.get('Username'), app.get('value')]))
TypeError: sequence item 0: expected string, NoneType found

我做错了导致此错误的原因是什么?

(我的问题似乎是正确访问我的config.file的树结构)

1 个答案:

答案 0 :(得分:2)

您可以将代码更改为:

print(''.join([app.get('name'), app.find('value').text]))
在这种情况下,{p> appElement Object <setting>。使用get函数,您将使用find按名称获取属性值(例如name,serializeAs) 函数你会得到一个子元素(例如<value>)。

获得<value>后,您可以使用text

获取数据

请注意,site<AutotaskUpdateTicketEstimatedHours.My.MySettings>)没有任何属性,因此您获得None