我试图使用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的树结构)
答案 0 :(得分:2)
您可以将代码更改为:
print(''.join([app.get('name'), app.find('value').text]))
在这种情况下,{p> app
是Element Object <setting>
。使用get
函数,您将使用find
按名称获取属性值(例如name,serializeAs)
函数你会得到一个子元素(例如<value>
)。
获得<value>
后,您可以使用text
请注意,site
(<AutotaskUpdateTicketEstimatedHours.My.MySettings>
)没有任何属性,因此您获得None
。