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