10
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'))

以上适用于 python 2.6 但不适用于 python 3.0 - 任何使它在 python 3 中工作的想法都非常感谢。我上ParseFile线的错误是TypeError: read() did not return a bytes object (type=str)

4

2 回答 2

17

您需要将该文件作为二进制文件打开:

parser.ParseFile(open('sample.xml', 'rb'))
于 2009-07-24T18:47:07.103 回答
4

我在尝试将xmltodict模块与 Python 3 一起使用时遇到了这个问题。在 Python 2.7 下我没有问题,但在 Python 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
于 2014-12-29T18:39:17.643 回答