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

Error using ElementTree to parse data from .config file

我正在尝试使用 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 的树结构)

您可以将代码更改为:

print(''.join([app.get('name'), app.find('value').text]))

app 在本例中是 Element Object <setting>。使用 get 函数,您将通过名称(例如名称、serializeAs)获取属性值,使用 find 函数,您将获得一个子元素(例如 <value>)。

一旦你有了<value>你就可以用text

获取里面的数据

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