首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python ElementTree

Python ElementTree
EN

Stack Overflow用户
提问于 2014-07-19 17:16:09
回答 2查看 432关注 0票数 1

使用ElementTree的XML配置文件有问题。我希望有一种简单的方法来找到元素的文本,而不管它在XML树中的位置。从文档中可以看出,我应该能够使用findtext()来完成这个任务,但是无论如何,我都不会得到任何返回。我哪里出问题了?每个人都告诉我,XML在Python中非常容易处理,但我只遇到了麻烦。

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

预期结果

代码语言:javascript
复制
80

实际效果

代码语言:javascript
复制
None
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-19 17:39:45

findtext需要一个完整的路径,但是您已经给出了一个相对路径,所以您无法找到要查找的元素。

您可以提供良好的xpath,也可以修改代码。

代码语言:javascript
复制
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:

如果您希望将所有匹配的文本作为列表,则代码有一点不同。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2014-07-19 17:30:04

您可以使用xpath来获取所需的元素。

return root.find('./events/airTemps/hiTemp').text

很容易跟踪这里的文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24842952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档