我需要解析一个看起来像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"]}
谢谢,
安东尼奥
答案 0 :(得分: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']}