Python遍历不同的XML标记

时间:2015-07-20 18:16:22

标签: python xml parsing

我有一个XML文件,格式如下:

<commands>
  <command name = "">
  <data byte=""></data>
  </command>
</commands>

<registers>
  <register name = "">
  <mask name =""></mask>
</registers>

在添加寄存器标签之前,我可以使用以下方式遍历文档:

for command_data_name in root.findall('command'):
    if (command_data_name.get('major') == major_bits and command_data_name.get('minor') == minor_bits):
        command_name = command_data_name.get('name')

但现在我得到了

xml.etree.ElementTree.ParseError: junk after document element.

显然是通过整合寄存器标签引起的。如果我想获取寄存器信息,这应该怎么看?

  <registers>

    <register name="Command">
      <bits major_mask="0xFF00000000", right_shift="32", left_shift="0"></bits>
      <bits minor_mask="0xFF0000000000", right_shift="40", left_shift="0"></bits>
      <bits doorbell_mask="0x1000000000000", right_shift="48", left_shift="0"></bits>
      <bits sequence_mask="0xF000000000000000", right_shift="63", left_shift="0"></bits>
    </register>

    <register name="Status">
      <bits mb_comp_mask="0x1", right_shift="0", left_shift="0"></bits>
      <bits nonce_mask="0x2", right_shift="1", left_shift="0"></bits>
      <bits bos_mask="0xFF", right_shift="3", left_shift="0"></bits>
      <bits status_code_mask="0xFF00", right_shift="12", left_shift="0"></bits>
    </register>

  </registers>

1 个答案:

答案 0 :(得分:1)

每个XML文档应该只有1个根元素,但上面应该包含多个根元素的文档 - toString()<commands>。来自wikipedia -

  

每个XML文档只有一个根元素。它包含所有其他元素,因此是所有其他元素的唯一父元素。 ROOT元素也称为PARENT元素。

这是造成错误的原因 -

<registers>

解决这个问题的最简单方法是将所有内容包装在单个根元素中,但真正的解决方法是考虑如何构建xml,并相应地构造它(以便它只有1个根)元素)。

另一个问题是xml中的xml.etree.ElementTree.ParseError: junk after document element ,你不需要在xml元素中使用逗号,删除它们就可以了。逗号示例 -

,