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

Das obige funktioniert in Python 2.6, aber nicht in Python 3.0 - keine Ideen, damit es in Python 3 funktioniert sehr geschätzt. Der Fehler, den ich auf der ParseFile Linie bekommen, ist TypeError: read() did not return a bytes object (type=str)Expat Parsing in Python 3

Antwort

12

Sie diese Datei als binäre öffnen müssen:

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

Vielen Dank! - Das hat es behoben. – OpenSource

3

ich in dieses Problem lief beim Versuch, das xmltodict Modul mit Python verwenden 3. Wählen Sie unter Python 2.7 I hatte keine Probleme, aber unter Python 3 habe ich den gleichen Fehler. Die Lösung ist die gleiche, die von @SilentGhost vorgeschlagen wurde:

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

sehr gut finden. lief auf das gleiche Problem mit Xmltodict. Tnx – k3it