pythonlxml获取nod的名称

2024-10-01 09:35:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的xml文件:

<FuzzyComparison>
    <Modules>
        <Module>
            <name>AutosoukModelMakeFuzzyComparisonModule</name>
            <configurationLoader>DefaultLoader</configurationLoader>
            <configurationFile>MakesModels.conf</configurationFile>
            <settings></settings>
        </Module>
        <Module>
            <name>DefaultFuzzyComparisonModule</name>
            <configurationLoader>DefaultLoader</configurationLoader>
            <configurationFile>Buildings.conf</configurationFile>
            <settings>
                <attribute>building</attribute>
            </settings>
        </Module>
    </Modules>
    </FuzzyComparison>

这是我一直试图解析它的代码:

^{pr2}$

结果如下:

[{'moduleConfigurationFile': 'MakesModels.conf', 'configurationLoader': 'Default
Loader', 'name': 'AutosoukModelMakeFuzzyComparisonModule', 'settings': {<Element
 settings at 0x25257c8>: None}}, {'moduleConfigurationFile': 'Buildings.conf', '
configurationLoader': 'DefaultLoader', 'name': 'DefaultFuzzyComparisonModule', '
settings': {<Element settings at 0x2525e48>: '\n\t\t\t\t'}}]

我的问题

我不知道如何获取settings节点的名称和值,因为正如您所见,除了settings之外,所有的工作都很好,我需要这样做:

"attribute": building

但我的密码告诉我:

{<Element settings at 0x2525e48>: '\n\t\t\t\t'}}]

你能帮我解决这个问题吗?在


Tags: namemodulessettingsconfattributeelementatmodule
1条回答
网友
1楼 · 发布于 2024-10-01 09:35:51

由于findall()返回一个列表,所以您需要迭代该列表元素的内容,而不是列表本身。您还希望将元素的标记用作键,而不是使用元素本身。在

settingsDict = {}
for settingsNode in module.findall('settings'):
    for setting in settingsNode:
        settingsDict[setting.tag] = setting.text

或者,如果您只有一个settings标记

^{pr2}$

可以简化为:

settingsDict = {setting.tag: setting.text
                for setting in module.find('settings')}

相关问题 更多 >