`
bcyy
  • 浏览: 1824091 次
文章分类
社区版块
存档分类
最新评论

Xml文件保存聊天记录

 
阅读更多

版权所有,转载请注明出处: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')
分享到:
评论

相关推荐

    聊天窗口演示(XML+GDI表情管理、图文混排...)

    支持字体设置、图文混排、表情及各种格式图片的插入、发送与保存,聊天记录的保存等等... 1、聊天输入、输出窗口:使用CRichEditCtrl控件,扩展后方便了字体设置、图文混排、表情及各种格式图片的插入,及窗口上...

    ajax 聊天室

    ajax的dwr聊天室记录保存在xml文件里

    .NET QQ聊天程序源代码

    使用Microsoft Visual Studio2005和SQL Server实现的qq聊天程序,使用了XML协议,实现了登录、注册、点对点聊天、群聊、传送文件、聊天记录保存等

    xmljava系统源码-kefu-web:springmvc,websocket的聊天web

    目前实现了单聊、群聊、机器人回复、上下线提醒、离线消息拉取、聊天记录、断线重连等功能,项目已经结合Mysql数据库,聊天的信息会保存到数据库表中,已经跟layim结合完成,如果有更好的需求或想法可以联系我 ...

    PHP+Ajax网站开发典型实例

    实例50 服务器端自动生成XML文件 实例51 客户端以指定CSS样式显示数据 实例52 用户登录校验 实例53 页面自动刷新时间 实例54 实现新闻滚动播放 第7章 实现高级Ajax技术 实例 55创建工具提示 实例 56读取响应...

    PHP程序开发范例宝典III

    实例140 框架在聊天室中的应用 209 实例141 使用框架嵌套技术居中显示框架页 211 第6章 PHP与MySQL数据库技术 213 6.1 连接MySQL数据库 214 实例142 通过mysql_connect函数连接数据库 214 实例143 通过...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    ASP200问.EXE

    145.如何通过XMLDom在服务器端操作XML文件(示例一) 145.如何通过XMLDom在服务器端操作XML文件(示例二) 146.如何使用XML实现不刷新页面查询数据库 147.如何把HTML表单提交的数据转化成XML文件(第一步) 147.如何...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    13.2.xml 一个雇员列表xml文件 13.2.xsl 一个XSL样式表的例子 13.3.htm Internet Explorer 浏览器中XML的应用 13.4.htm 直接对XML文档进行添加、删除和显示数据的操作 13.5.js ...

    懒QQ(LanQQ)

    *增加远程协助(注:测试版中无,在考虑以什么方式加入到程序中) *修正了黑名单和好友的保存方式(以XML保存) *美化界面NICO正在制作中(期待ING) *修改界面加载方式,直接中本地文件中加载(因本人不擅长...

    黑天鹅远控--java远程控制软件

    用java编写的功能强大的远程控制软件,并且为开源软件。主要功能有, 生成服务器、屏幕监视,屏幕...12.Server项目的权限设置记录保存在xml中 欢迎大家到我们的官方网站去下载! 网址:http://www.blackswansoft.com

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    vc++ 开发实例源码包

    实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...

    campfire_export:从您的37signals Campfire帐户中导出成绩单和上传的文件

    保存聊天记录HTML,XML和纯文本版本。 将上传的文件导出到特定于一天的子目录,以方便访问。 报告和日志导出错误,让您知道丢失的内容。 强迫性地确认所有内容均已正确导出。 正在安装 或更高版本。 也是必需的-...

    vc++ 应用源码包_1

    实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其应用 如题。 CSkinSlier CSliderCtrl自绘 Cursor 生成图标,运行到鼠标图标。 cutscene win32下实现视频...

Global site tag (gtag.js) - Google Analytics