【问题标题】:Python traversing through different XML tagsPython遍历不同的XML标签
【发布时间】:2015-07-20 18:16:22
【问题描述】:

我有一个格式如下的 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>

【问题讨论】:

  • 那是完整的 xml 吗?
  • 我复制了很多相同的东西,所以基本上是的。

标签: python xml parsing


【解决方案1】:

每个 XML 文档应该只有 1 个根元素,但您应该在上面的文档有多个根元素 - &lt;commands&gt;&lt;registers&gt;。来自wikipedia -

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

这是导致错误的原因 -

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

解决此问题的最简单方法是将所有内容都包含在单个根元素中,但真正的解决方法是考虑您希望如何构造 xml,并相应地构造它(使其只有 1 个根元素)。


另一个问题是 xml 中的 , ,您不需要 xml 元素中的逗号,删除它们,它应该可以工作。逗号示例 -

<bits major_mask="0xFF00000000", right_shift="32", left_shift="0"></bits>
                               ^                 ^
                               comma causing issue

【讨论】:

  • 嗯,所以我试着把 之间的所有东西都包起来,还是不行。
  • xml.etree.ElementTree.ParseError: not well-formed (invalid token)
  • 使用您遇到错误的 xml 更新问题。
  • 添加了搞砸的位。
  • 啊,我不认为我应该有逗号!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 2016-06-26
相关资源
最近更新 更多