版权所有,转载请注明出处:http://guangboo.org/2013/01/29/save-chat-history-with-xml
利用上篇文章定义的存储聊天记录的接口,这里具体实现使用xml文件保存聊天记录的功能。
代码如下:
import xml.dom.minidom as dom
import os
import datetime
class XmlStorageHistory(History):
def __init__(self, jid, to, path):
super(XmlStorageHistory, self).__init__(jid, to, path)
self.filename = os.path.join(path, to + ".xml")
self.doc = None
self.root = None
self.saved = True
def open(self):
impl = dom.getDOMImplementation()
if os.path.exists(self.filename):
self.doc = dom.parse(self.filename)
else:
self.doc = impl.createDocument(None, 'history', None)
self.root = self.doc.documentElement
#self.doc.loadxml(parse(self.filename, 'r').read())
self.saved = False
def read(self):
if self.doc == None or self.root == None:
raise HistoryError('Please Open connection.')
nodes = self.root.childNodes
for node in nodes:
yield (node.getAttribute('talk'), node.getAttribute('nick'),\
node.getAttribute('type'), node.nodeValue, node.getAttribute('datetime'),)
def write(self, talk, nickname, typ, msg, tm):
if self.doc == None or self.root == None:
raise HistoryError('Please Open connection.')
node = self.doc.createElement('conversation')
node.attributes['talk'] = talk
node.attributes['nick'] = nickname
node.attributes['type'] = typ
node.attributes['datetime'] = str(tm)
node.appendChild(self.doc.createTextNode(msg))
self.root.appendChild(node)
def save(self):
stream = open(self.filename, 'w')
self.doc.writexml(stream)
stream.close()
self.saved = True
def close(self):
if self.saved:return
self.save()
self.doc = None
self.root = None
测试代码同上一篇一致,只是SpliteStorageHistory改成XmlStorageHistory,如下:
if __name__ == '__main__':
sql = XmlStorageHistory('zhang@gmail.com','wang2xiao@gmail.com', 'c:\\his2')
sql.open()
sql.write('wang2xiao@gmail.com', 'Wang, 2Xiao', 'msg', 'Hi, What are you doing?',
datetime.datetime.now())
sql.write('zhang@gmail.com', 'Zhang, Guangbo', 'msg', 'Hi, Nothing.', datetime.datetime.now())
for row in sql.read():
print row
sql.close()
测试结果:
('wang2xiao@gmail.com', 'Wang, 2Xiao', 'msg', None, '2013-01-29 23:10:49.937000')
('zhang@gmail.com', 'Zhang, Guangbo', 'msg', None, '2013-01-29 23:10:49.937000')
分享到:
相关推荐
支持字体设置、图文混排、表情及各种格式图片的插入、发送与保存,聊天记录的保存等等... 1、聊天输入、输出窗口:使用CRichEditCtrl控件,扩展后方便了字体设置、图文混排、表情及各种格式图片的插入,及窗口上...
ajax的dwr聊天室记录保存在xml文件里
使用Microsoft Visual Studio2005和SQL Server实现的qq聊天程序,使用了XML协议,实现了登录、注册、点对点聊天、群聊、传送文件、聊天记录保存等
目前实现了单聊、群聊、机器人回复、上下线提醒、离线消息拉取、聊天记录、断线重连等功能,项目已经结合Mysql数据库,聊天的信息会保存到数据库表中,已经跟layim结合完成,如果有更好的需求或想法可以联系我 ...
实例50 服务器端自动生成XML文件 实例51 客户端以指定CSS样式显示数据 实例52 用户登录校验 实例53 页面自动刷新时间 实例54 实现新闻滚动播放 第7章 实现高级Ajax技术 实例 55创建工具提示 实例 56读取响应...
实例140 框架在聊天室中的应用 209 实例141 使用框架嵌套技术居中显示框架页 211 第6章 PHP与MySQL数据库技术 213 6.1 连接MySQL数据库 214 实例142 通过mysql_connect函数连接数据库 214 实例143 通过...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
145.如何通过XMLDom在服务器端操作XML文件(示例一) 145.如何通过XMLDom在服务器端操作XML文件(示例二) 146.如何使用XML实现不刷新页面查询数据库 147.如何把HTML表单提交的数据转化成XML文件(第一步) 147.如何...
13.2.xml 一个雇员列表xml文件 13.2.xsl 一个XSL样式表的例子 13.3.htm Internet Explorer 浏览器中XML的应用 13.4.htm 直接对XML文档进行添加、删除和显示数据的操作 13.5.js ...
*增加远程协助(注:测试版中无,在考虑以什么方式加入到程序中) *修正了黑名单和好友的保存方式(以XML保存) *美化界面NICO正在制作中(期待ING) *修改界面加载方式,直接中本地文件中加载(因本人不擅长...
用java编写的功能强大的远程控制软件,并且为开源软件。主要功能有, 生成服务器、屏幕监视,屏幕...12.Server项目的权限设置记录保存在xml中 欢迎大家到我们的官方网站去下载! 网址:http://www.blackswansoft.com
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...
保存聊天记录HTML,XML和纯文本版本。 将上传的文件导出到特定于一天的子目录,以方便访问。 报告和日志导出错误,让您知道丢失的内容。 强迫性地确认所有内容均已正确导出。 正在安装 或更高版本。 也是必需的-...
实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...