2014-04-11 53 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