从xml文件中获取json字典

时间:2011-05-20 15:29:53

标签: python xml

  

可能重复:
  easiest way to parse xml in python

我需要解析一个看起来像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 个答案:

答案 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']}