2010-04-04 11 views
6

मैं xml फ़ाइल को पार्स करने के लिए पायथन sax का उपयोग करता हूं। एक्सएमएल फ़ाइल वास्तव में एकाधिक एक्सएमएल फाइलों का संयोजन है। यह इस प्रकार के रूप में दिखाई देता है:पायथन sax त्रुटि "दस्तावेज़ तत्व के बाद जंक"

<row name="abc" age="40" body="blalalala..." creationdate="03/10/10" /> 
<row name="bcd" age="50" body="blalalala..." creationdate="03/10/09" /> 

मेरे अजगर कोड निम्नलिखित में है। यह "दस्तावेज़ तत्व के बाद जंक" त्रुटि दिखाता है। इस समस्या को हल करने के लिए कोई अच्छा विचार है। धन्यवाद।

from xml.sax.handler import ContentHandler 
from xml.sax import make_parser,SAXException 
import sys 

class PostHandler (ContentHandler): 
    def __init__(self): 
     self.find = 0 
     self.buffer = '' 
     self.mapping={} 
    def startElement(self,name,attrs): 
     if name == 'row': 
      self.find = 1 
      self.body = attrs["body"] 
      print attrs["body"] 
    def character(self,data): 
     if self.find==1: 
      self.buffer+=data 
    def endElement(self,name): 
     if self.find == 1: 
      self.mapping[self.body] = self.buffer 
      print self.mapping 
parser = make_parser() 
handler = PostHandler() 
parser.setContentHandler(handler) 
try: 
    parser.parse(open("2.xml")) 
except SAXException: 
+0

+1 मुझे यह सही त्रुटि थी, और इस सवाल ने मेरी मदद की। "दस्तावेज़ तत्व के बाद जंक" से अनुपलब्ध मूल तत्व को समझ नहीं सका: डी –

उत्तर

11
xmldata = ''' 
<row name="abc" age="40" body="blalalala..." creationdate="03/10/10" /> 
<row name="bcd" age="50" body="blalalala..." creationdate="03/10/09" /> 
''' 

डेटा के चारों ओर एक आवरण टैग जोड़ें। मैं ElementTree का उपयोग किया है, क्योंकि यह इतना आसान है, लेकिन आप किसी भी पार्सर पर भी ऐसा ही करने के लिए सक्षम होना चाहते हैं:

{'age': '40', 
'body': 'blalalala...', 
'creationdate': '03/10/10', 
'name': 'abc'} 
{'age': '50', 
'body': 'blalalala...', 
'creationdate': '03/10/09', 
'name': 'bcd'} 
4

में

from xml.etree import ElementTree as etree 

# wrap the data 
xmldata = '<rows>' +data + '</rows>' 

rows = etree.fromstring(xmldata) 
for row in rows: 
    print row.attrib 

परिणाम लगता है कि आप में मूल तत्व की जरूरत नहीं है अपने एक्सएमएल फ़ाइल। अपनी पंक्ति तत्वों को एकल पंक्ति तत्व में लपेटें।

संबंधित मुद्दे