2015-07-20 87 views
1

我有以下格式的XML文件,遍历:Python中通过不同的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> 
+0

是完整的xml吗? –

+0

我有很多同样的东西被复制,所以基本上,是的。 – Ryan

回答

1

每个XML文档应该只有1个元素,但该文档应该上述有多个根元素 - <commands><registers>。从wikipedia -

Each XML document has exactly one single root element. It encloses all the other elements and is therefore the sole parent element to all the other elements. ROOT elements are also called PARENT elements.

这是什么原因造成的错误 -

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 
+0

嗯,所以我试图包装之间的一切,它仍然无法正常工作。 – Ryan

+0

您是否收到任何新错误?或者同样的错误? –

+0

xml.etree.ElementTree.ParseError:格式不正确(无效令牌) – Ryan