2009-07-24 21 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')) 

Powyższe działa w Pythonie 2.6, ale nie w Pythonie 3.0 - wszelkie pomysły, aby działało w Pythonie 3 bardzo doceniane. Błąd pojawia się na linii ParseFile jest TypeError: read() did not return a bytes object (type=str)Expat parsowania w python 3

Odpowiedz

12

trzeba otworzyć ten plik jako binarny:

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

Dziękujemy! - to naprawiło. – OpenSource

3

wpadłem na ten problem, starając się korzystać z modułu xmltodict Pythona 3. W Pythonie 2.7 I nie miał żadnych problemów, ale w Pythonie 3 dostałem ten sam błąd. Rozwiązanie jest takie samo, jak sugerował @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

bardzo dobre znalezisko. wpadł na ten sam problem z xmltodict. tnx – k3it