Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python lxml获取节点的名称_Python_Xml_Python 2.7_Lxml - Fatal编程技术网

python lxml获取节点的名称

python lxml获取节点的名称,python,xml,python-2.7,lxml,Python,Xml,Python 2.7,Lxml,这是我的xml文件: <FuzzyComparison> <Modules> <Module> <name>AutosoukModelMakeFuzzyComparisonModule</name> <configurationLoader>DefaultLoader</configurationLoader> <

这是我的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>
结果如下:

[{'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'}}]
但我的代码告诉我:

{<Element settings at 0x2525e48>: '\n\t\t\t\t'}}]
{:'\n\t\t\t\t'}]
您能帮我解决这个问题吗?

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

settingsDict = {}
for settingsNode in module.findall('settings'):
    for setting in settingsNode:
        settingsDict[setting.tag] = setting.text
或者,如果您只有一个
设置
标记

settingsDict = {}
for setting in module.find('settings'):
    settingsDict[setting.tag] = setting.text
可简化为:

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

我只需要一个
settings
标签,它有很多值,请问有没有办法避免在
settings
标签上使用
findall
?我注意到代码在其他地方使用了
module.find()
。这是我的错误,但是,我现在尝试只使用find并使用一个循环(而不是两个),但是现在我在设置中得到了空结果,没有保存任何内容。您可以自己尝试代码,它是一个工作代码,你只需要运行itI,事实上我自己无法尝试代码,因为你更改了代码,但没有发布更改。但我已经更新了答案。
settingsDict = {}
for setting in module.find('settings'):
    settingsDict[setting.tag] = setting.text
settingsDict = {setting.tag: setting.text
                for setting in module.find('settings')}