2014-04-11 35 views
5

Dobry dzień wszystkim.Python ElementTree "nie znaleziono elementu" wyjątek

Próbuję odczytać, przeanalizować i użyć pliku xml przy użyciu ElementTree. następujące dane:

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

Niestety, ja ElementTree daje wyjątek !!! Odczytu pliku z następującego kodu:

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

Wyjątek:

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

nie mogę dowiedzieć się, co się stało, próbowałem zmienić data.xml w każdy możliwy sposób, mogę sobie wyobrazić, nie różnica. To zawsze ostatnia linia pliku! Co robię źle? Dzięki!

Odpowiedz

4

Twoje tagi nie są prawidłowo zamknięte. Na przykład, aby zamknąć tag "meteoryt", użyj </meteorite>, a nie <meteorite />.

+1

Wygląda na to, że jestem dzisiaj w drużynie przyjęcia powitalnego! Witamy w Stack Overflow @grvsmth. Gratulacje dla twojego doktora i mam nadzieję, że 'podczas (YourStay) {spróbuj {StackOverflow} złapać {przyjemność}}. Tak, to banalne, ale hej, humor to jedna z ostatnich rzeczy, które my, ludzie, możemy zrobić lepiej niż komputery. –

+1

Cóż, DZIĘKUJĘ. Tego właśnie potrzebowałem. – Nearoo

+0

Cieszę się, że mogę Ci pomóc, i dziękuję za powitanie! – grvsmth

6

XML nie jest dobrze sformułowany, ElementTree nie można go przetworzyć - wygląda na to, że jest częścią prawdziwego dokumentu.

Oto co otrzymasz, jeśli sformatować go:

<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

Co masz na myśli przez "format"? Jak powinienem to zrobić lepiej? – Nearoo

+0

@ user3424423 Właśnie wcięłam xml, więc łatwiej zauważyć, że XML nie jest poprawnie zbudowany. Elementtree nie poradzi sobie z tym. – alecxe

+0

To mi w ogóle nie pomaga. Co muszę zrobić lepiej? – Nearoo

Powiązane problemy