从XML文件获取JSON字典

1 投票
1 回答
574 浏览
提问于 2025-04-16 18:02

可能重复的问题:
在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']}

撰写回答