免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3029 | 回复: 0
打印 上一主题 下一主题

python xml & encode [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-26 12:30 |只看该作者 |倒序浏览
bbb.xml内容The Cathedral & the BazaarEric S. RaymondMaking TeX WorkNorman Walsh
脚本a.py#!/usr/bin/python import xml.saximport pprintfrom xml.sax import make_parser, parseString
class BookHandler(xml.sax.handler.ContentHandler):
        def __init__(self):                self.inTitle = 0                self.mapping = {}
        def startElement(self, name, attributes):
                if name == "book":                        self.buffer = ""                        self.isbn = attributes["isbn"]                elif name == "title":                        self.inTitle = 1
        def characters(self, data):                if self.inTitle:                        self.buffer += data
        def endElement(self, name):                if name == "title":                        self.inTitle = 0                        self.mapping[self.isbn] = self.buffer
parser = xml.sax.make_parser()handler = BookHandler()parser.setContentHandler(handler)document = file("bbb.xml")text = document.read().replace("GB2312",'utf-8',1)utfdoc = text.decode("gb2312").encode("utf-8")xml.sax.parseString(text,handler)pprint.pprint(handler.mapping)注:python 的xml.sax对中文的支持不好,所以这里先把xml里的gb2312先替换成utf-8,并把文件的编码也改成utf-8,然后再处理。注意处理完后再把他还原成gb2312,要不可能会显示异常。另外,有些情况直接用parser.parse(document)也可以,parser.parse()后面带的参数为文件名,或文件句柄,parser.parse后可带handler参数,该参数必须是SAX ContentHandler 实例。parseString(string, handler[, error_handler])类似于parse(),带的参数为字符串,需要通过xml.sax.parseString()来调用。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/14754/showart_2037453.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP