2014-04-11 32 views
5

Herkese iyi günler.Python ElementTree "öğe bulunamadı" istisnası

ElementTree'yi kullanarak bir xml dosyasını okumaya, ayrıştırmaya ve kullanmaya çalışıyorum. takiben veriler: Ne yazık ki

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

, ben elementtree bir istisna verir !!! Aşağıdaki kod ile dosya okuma:

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

İstisna:

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

hayır, neyin yanlış olduğunu, ben tahmin edebilirsiniz mümkün olan her şekilde data.xml değiştirmeye çalıştık çözemiyorum farkı. Her zaman dosyanın son satırı! Neyi yanlış yapıyorum? Teşekkürler!

cevap

4

Kişisel etiketlerin düzgün kapatılmamış. Örneğin, bir "meteorit" etiketini kapatmak için 'u <meteorite /> kullanmayın.

+1

Hoşgeldin parti takımında olduğumu düşünüyorum, bugün! Stack Overflow @grvsmth'e hoş geldiniz. Doktoralarınızdan dolayı tebrik ederim ve umarım ki siz (while) ({StackOverflow} yakalamak için {enjoyment}}. Evet, bu çok saçma, ama hey, mizahın insanlardan daha iyi yapabileceğimiz en son şeylerden biri. –

+1

Peki, TEŞEKKÜR EDERİZ. İhtiyacım olan buydu. – Nearoo

+0

Yardımlardan memnun oldum ve hoşgeldiniz için teşekkürler! – grvsmth

6

XML iyi biçimlendirilmemiş, ElementTree ayrıştıramazsınız - gerçekten gerçek bir belgenin bir parçası gibi görünüyor.

Burada biçimlendirmek eğer ne olsun:

<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

"Biçim" ile ne demek istiyorsun? Nasıl daha iyi yapmalıyım? – Nearoo

+0

@ user3424423 xml'yi daha yeni ekledim, böylece xml'nin doğru yapılandırılmadığını görmek daha kolay. Elementtree bunun üstesinden gelemez. – alecxe

+0

Bu bana hiç yardımcı olmuyor. Daha iyi ne yapmam gerekiyor? – Nearoo

İlgili konular