python - 将 XML 解析为哈希表

标签 python xml dom

我有一个以下格式的 XML 文件:

<doc>
<id name="X">
  <type name="A">
    <min val="100" id="80"/>
    <max val="200" id="90"/>
   </type>
  <type name="B">
    <min val="100" id="20"/>
    <max val="20" id="90"/>
  </type>
</id>

<type...>
</type>
</doc>

我想解析这个文档并建立一个哈希表

{X: {"A": [(100,80), (200,90)], "B": [(100,20), (20,90)]}, Y: .....} 

我如何在 Python 中执行此操作?

最佳答案

我不同意其他答案中使用 minidom 的建议——这是对最初为其他语言设计的标准的一般 Python 改编,可用但不是很合适。现代 Python 中推荐的方法是 ElementTree .

在第三方模块中也实现了相同的接口(interface),速度更快lxml ,但是除非你需要极快的速度,否则 Python 标准库中包含的版本很好(而且比 minidom 更快)——关键是针对该接口(interface)编程,然后你总是可以切换到同一接口(interface)的不同实现 future ,如果您愿意,只需对您自己的代码进行最少的更改。

例如,在所需的导入 &c 之后,以下代码是您示例的最小实现(它不验证 XML 是否正确,只是假设正确性提取数据——添加各种检查非常容易类(class)):

from xml.etree import ElementTree as et  # or, import any other, faster version of ET

def xml2data(xmlfile):
  tree = et.parse(xmlfile)
  data = {}
  for anid in tree.getroot().getchildren():
    currdict = data[anid.get('name')] = {}
    for atype in anid.getchildren():
      currlist = currdict[atype.get('name')] = []
      for c in atype.getchildren():
        currlist.append((c.get('val'), c.get('id')))
  return data

根据您的样本输入,这会产生您想要的结果。

关于python - 将 XML 解析为哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1908410/

相关文章:

r - 识别 xml 文件的独特属性

javascript - 检测浏览器 DOM 更改完成

python - pyautogui 鼠标单击在某些程序中不起作用

python - NumPy 数据类型比较

xml - Android:使用 ISO-8859-1 编码的 SaxParser 问题

c# - 使用正则表达式从 XML 字符串中删除 XML 节点命名空间前缀

html - 是否可以仅使用 1 个 ID 名称来隐藏所有元素标签?

xpath 后的 PHP DomXPath 编码问题

python - 从 2D numpy 数组快速计算随机 3D numpy 数组

python - 仅当通过 python firebase SDK 添加文档时,才在 angularfire 上更新空文档