2009-07-24 20 views
8
import xml.parsers.expat 

def start_element(name, attrs): 
    print('Start element:', name, attrs) 

def end_element(name): 
    print('End element:', name) 

def character_data(data): 
    print('Character data: %s' % data) 

parser = xml.parsers.expat.ParserCreate() 
parser.StartElementHandler = start_element 
parser.EndElementHandler = end_element 
parser.CharacterDataHandler = character_data 
parser.ParseFile(open('sample.xml')) 

उपरोक्त काम पायथन 2.6 में उपरोक्त काम करता है लेकिन पायथन 3.0 में नहीं - इसे किसी भी विचार को पायथन 3 में काम करने के लिए बहुत सराहना की जाती है। त्रुटि मैं ParseFile लाइन पर मिल TypeError: read() did not return a bytes object (type=str)पायथन 3

उत्तर

12

है आप बाइनरी के रूप में है कि फ़ाइल को खोलने की जरूरत है:

parser.ParseFile(open('sample.xml', 'rb')) 
+0

धन्यवाद! - यह तय है। – OpenSource

3

अजगर 2.7 मैं तहत पायथन 3. साथ xmltodict मॉड्यूल का उपयोग करने के दौरान मैं इस समस्या में पड़ गए कोई समस्या नहीं थी लेकिन पाइथन 3 के तहत मुझे यह वही त्रुटि मिली। समाधान वही है जो @SilentGhost द्वारा सुझाया गया था:

import xmltodict 

def convert(xml_file, xml_attribs=True): 
    with open(xml_file, "rb") as f: # notice the "rb" mode 
     d = xmltodict.parse(f, xml_attribs=xml_attribs) 
     return d 
+1

बहुत अच्छा खोज। xmltodict के साथ एक ही मुद्दे में भाग गया। tnx – k3it