从XML文件获取JSON字典
可能重复的问题:
在Python中解析XML的最简单方法
我需要解析一个看起来像XML文件的文件,但它没有XML声明。
这里有一个XML文件的例子:
<connection name="name_1">
<parameter name="user" value="user_value_1"/>
<parameter name="password" value="psw_1"/>
</connection>
<connection name="name_2">
<parameter name="user" value="user_value_2"/>
<parameter name="password" value="psw_2"/>
</connection>
<connection name="name_n">
<parameter name="user" value="user_value_n"/>
<parameter name="password" value="psw_n"/>
</connection>
我的问题是,我可以使用哪些库来解析这个文件呢?
实际上,给定这个文件,我该如何得到以下输出:
{"connection names":["name_1","name_2",…,"name_n"]}
谢谢,
安东尼奥
1 个回答
2
你的XML文件不合法,无法正确解析,因为它缺少一个主要的元素。下面是一个有效的版本:
<connections>
<connection name="name_1">
<parameter name="user" value="user_value_1"/>
<parameter name="password" value="psw_1"/>
</connection>
<connection name="name_2">
<parameter name="user" value="user_value_2"/>
<parameter name="password" value="psw_2"/>
</connection>
<connection name="name_n">
<parameter name="user" value="user_value_n"/>
<parameter name="password" value="psw_n"/>
</connection>
</connections>
你可以使用minidom
来解析它。虽然对于很多元素来说,它的速度有点慢,但我还是喜欢用这种感觉很像JavaScript的东西:
from xml.dom.minidom import parseString
document = parseString('''
<?xml version="1.0"?>
<connections>
<connection name="name_1">
<parameter name="user" value="user_value_1"/>
<parameter name="password" value="psw_1"/>
</connection>
<connection name="name_2">
<parameter name="user" value="user_value_2"/>
<parameter name="password" value="psw_2"/>
</connection>
<connection name="name_n">
<parameter name="user" value="user_value_n"/>
<parameter name="password" value="psw_n"/>
</connection>
</connections>''')
names = {'connection names': []}
for connection in document.getElementsByTagName('connection'):
names['connection names'].append(connection.getAttribute('name'))
print names
输出结果是:
{'connection names': [u'name_1', u'name_2', u'name_n']}