2014-04-11 18 views
5

Buona giornata a tutti.Python ElementTree eccezione "nessun elemento trovato"

Sto provando a leggere, analizzare e utilizzare un file xml utilizzando ElementTree. seguenti dati:

<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 /> 

Purtroppo, ho ElementTree dà un'eccezione !!! Leggere il file con codice seguente:

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

Eccezione:

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*** 

Non riesco a capire cosa c'è che non va, ho provato a cambiare data.xml in ogni modo possibile posso immaginare, senza differenza. È sempre l'ultima riga del file! Cosa sto sbagliando? Grazie!

risposta

4

tuoi tag non sono chiusi correttamente. Ad esempio, per chiudere un tag "meteorite", usare </meteorite> non <meteorite />.

+1

Sembra che io sia nella squadra di benvenuto, oggi! Benvenuto in Stack Overflow @grvsmth. Congratulazioni per il tuo dottorato di ricerca e spero che tu 'mentre (yourStay) {try {StackOverflow} catch {enjoyment}}'. Sì, è banale, ma hey, l'umorismo è una delle ultime cose che noi umani possiamo ancora fare meglio dei computer. –

+1

Bene GRAZIE. Questo è quello di cui avevo bisogno. – Nearoo

+0

Felice di aiutare, e grazie per il benvenuto! – grvsmth

6

L'XML non è ben formato, ElementTree non è in grado di analizzarlo - sembra davvero che faccia parte di un vero documento.

Ecco cosa si ottiene se si formatta:

<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

Cosa intendi per "formato"? Come dovrei fare meglio? – Nearoo

+0

@ user3424423 Ho appena indentato l'xml, quindi è più facile vedere che l'xml non è strutturato correttamente. Elementtree non può gestirlo. – alecxe

+0

Questo non mi aiuta affatto. Cosa devo fare meglio? – Nearoo

Problemi correlati