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

Lo anterior funciona en python 2.6 pero no en python 3.0. Todas las ideas para que funcione en python 3 son muy apreciadas. El error que consigo en la línea ParseFile es TypeError: read() did not return a bytes object (type=str)Analizador de expatriados en python 3

Respuesta

12

es necesario abrir ese archivo en formato binario:

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

¡Gracias! - Eso lo solucionó. – OpenSource

3

me encontré con este problema al intentar utilizar el módulo xmltodict con Python 3. En Python 2.7 I no tuve problemas, pero en Python 3 obtuve el mismo error. La solución es la misma que fue sugerida por @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

muy buen descubrimiento. se encontró con el mismo problema con xmltodict. tnx – k3it