Python ElementTree库
我在使用ElementTree处理XML配置文件时遇到了一些麻烦。我想要一个简单的方法来找到某个元素的文本,不管它在XML树的哪个位置。根据文档的说法,我应该可以用findtext()来做到这一点,但无论怎么做,我得到的结果都是None。我哪里出错了呢?大家都说在Python中处理XML很简单,可我却一直遇到问题。
configFileName = 'file.xml'
def configSet (x):
if os.path.exists(configFileName):
tree = ET.parse(configFileName)
root = tree.getroot()
return root.findtext(x)
hiTemp = configSet('hiTemp')
print hiTemp
还有这个XML
<configData>
<units>
<temp>F</temp>
</units>
<pins>
<lights>1</lights>
<fan>2</fan>
<co2>3</co2>
</pins>
<events>
<airTemps>
<hiTemp>80</hiTemp>
<lowTemp>72</lowTemp>
<hiTempAlarm>84</hiTempAlarm>
</airTemps>
<CO2>
<co2Hi>1500</co2Hi>
<co2Low>1400</co2Low>
<co2Alarm>600</co2Alarm>
</CO2>
</events>
<settings>
<apikeys>
<prowl>
<apikey>None</apikey>
</prowl>
</apikeys>
</settings>
期望的结果
80
实际的结果
None
2 个回答
1
1
findtext
需要一个完整的路径,但你提供的是一个相对路径,所以找不到你想要的元素。
你可以提供一个正确的 xpath,或者修改你的代码。
def configSet(x):
if os.path.exists(configFileName):
tree = ET.parse(configFileName)
root = tree.getroot()
for e in root.getiterator():
t = e.findtext(x)
if t is not None:
return t
更新 1:
如果你想把所有匹配的文本作为一个列表,代码会有些不同。
def configSet(x):
matches = []
if os.path.exists(configFileName):
tree = ET.parse(configFileName)
root = tree.getroot()
for e in root.getiterator():
t = e.findtext(x)
if t is not None:
matches.append(t)
return matches