2014-04-11 118 views
5

大家好日子。Python ElementTree“找不到元素”异常

我想读取,解析和使用ElementTree的XML文件。 以下数据:

<level> 
    <leveldata> 
     <level name="hh" difficulty="Easy" lenght="3600"> 
      <meteorite chance="4" speed="3" > 
       <image id="1"> 
       <image id="2"> 
       <image id="3"> 
      <meteorite /> 
      <meteorite chance="4" speed="3" > 
       <image id="4"> 
       <image id="5"> 
       <image id="6"> 
      <meteorite /> 
     <level /> 
    <leveldata /> 
    <meteorimages> 
     <meteor id="5" imagepath="res\meteorit_1.png"> 
     <meteor id="5" imagepath="res\meteorit_2.png"> 
     <meteor id="5" imagepath="res\meteorit_3.png"> 
    <meteorimages /> 
<datasheet /> 
<level /> 

可悲的是,我的ElementTree给出了一个例外!读取该文件与下面的代码:

import xml.etree.ElementTree as ET 
***code*** 
tree = ET.parse("res\\data.xml") 
root = tree.getroot() 

例外:

File "E:\blabla\core.py", line 26, in load_levelproperties 
    *tree = ET.parse("res\\data.xml")* File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line 
1182, in parse 
    *tree.parse(source, parser)* File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line 
657, in parse 
    *self._root = parser.close()* File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line 
1654, in close 
    *self._raiseerror(v)* File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line 
1506, in _raiseerror 
    ***raise err xml.etree.ElementTree.ParseError: no element found: line 16, column 9*** 

我无法弄清楚什么是错的,我试图改变data.xml中百般我可以想像,没有区别。它始终是文件的最后一行! 我在做什么错? 谢谢!

回答

4

你的标签是不正确关闭。例如,要关闭“陨石”标签,请使用</meteorite>而不是<meteorite />

+1

看起来我今天在欢迎派对团队!欢迎来到Stack Overflow @grvsmth。恭喜你的博士学位,我希望你能'while(yourStay){try {StackOverflow} catch {enjoyment}}'。是的,这很古怪,但嘿,幽默是我们人类仍然可以比电脑做得更好的最后一件事情之一。 –

+1

恩,谢谢。 这就是我需要的。 – Nearoo

+0

很高兴帮助,并感谢您的欢迎! – grvsmth

6

您的XML格式不正确,ElementTree无法解析它 - 它确实看起来像是真实文档的一部分。

这里,如果你格式化你会得到什么:

<level> 
    <leveldata> 
     <level name="hh" difficulty="Easy" lenght="3600"> 
      <meteorite chance="4" speed="3"> 
       <image id="1"> 
        <image id="2"> 
         <image id="3"> 
          <meteorite/> 
          <meteorite chance="4" speed="3"> 
           <image id="4"> 
            <image id="5"> 
             <image id="6"> 
              <meteorite/> 
              <level/> 
              <leveldata/> 
              <meteorimages> 
               <meteor id="5" imagepath="res\meteorit_1.png"> 
                <meteor id="5" imagepath="res\meteorit_2.png"> 
                 <meteor id="5" imagepath="res\meteorit_3.png"> 
                  <meteorimages/> 
                  <datasheet/> 
                  <level/> 
+0

你是什么意思的“格式”? 我该如何做得更好? – Nearoo

+0

@ user3424423我只是缩进了xml,因此更容易发现xml的结构不正确。 Elementtree无法处理它。 – alecxe

+0

这并不能帮助我。我有什么需要做得更好? – Nearoo