使用 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
。
我正在尝试使用 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
。