Python 3中的Expat解析

11 投票
2 回答
8476 浏览
提问于 2025-04-15 13:08
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)

2 个回答

8

我在用Python 3的时候,遇到了一个问题,想用xmltodict这个模块。之前在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
23

你需要以二进制的方式打开那个文件:

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

撰写回答