輕鬆瀏覽MSN Messenger的消息歷史

和QQ一樣,Messenger中必須登陸以後才能查看消息歷史,非常的不方便。
其實它們都是把消息存放在本地的,因此只需要一點點工作量,就能輕鬆的瀏覽Messenger的消息歷史。

以MSN Messenger7.0爲例,它的消息存放在“My Document/我接收到的文件/帳號/歷史記錄”目錄下。
該目錄中有如下兩類文件
  1. xml文件,存放消息的內容
  2. xsl文件,用於控制消息的顯示格式
其中的若干個xml文件雖然是以用戶帳號命名的,但是裏面可能包含你和若干個朋友聊天的信息。因此,我們首先要做的是利用C#將這些xml中的內容合併。

static void ShowLocalMSNMessage()
{
    string path = @"D:/My Document/我接收到的文件/帳號/歷史記錄";

    StringBuilder sb = new StringBuilder();

    sb.Append("<?xml version=/"1.0/" encoding=/"utf-8/"?>");
    sb.Append(Environment.NewLine);
    sb.Append("<?xml-stylesheet type='text/xsl' href='MessageLogxsl'?>");
    sb.Append(Environment.NewLine);
    sb.Append("<Log>");
    sb.Append(Environment.NewLine);

    DirectoryInfo info = new DirectoryInfo(path);
    foreach (FileInfo fileInfo in info.GetFiles("*.xml"))
    {
        Stream stream = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read);
        XmlReader reader = XmlReader.Create(stream);

        XPathDocument doc = new XPathDocument(reader);
        XPathNavigator nav = doc.CreateNavigator();

        XPathNodeIterator iter = nav.Select("/Log");

        while (iter.MoveNext())
        {
            sb.Append(iter.Current.InnerXml);
        }
    }

    sb.Append(Environment.NewLine);
    sb.Append("</Log>");

    File.WriteAllText(path + "All.xml", sb.ToString(), Encoding.UTF8);
}

這樣我們就得到了包含所有消息的All.xml文件,直接用IE打開就能瀏覽所有的消息了。
那麼如何只查看和某個朋友的聊天記錄了?我們只需要稍微修改一下MessageLog.xsl即可

首先,在“<!-- variables -->”後面插入
<xsl:variable name='QueryName'>要查詢的用戶名</xsl:variable>

爲了實現按時間排序,把“<tbody style='vertical-align:top'>”後面用於按SessionID排序的代碼改成按時間排序
<xsl:apply-templates>
    
<xsl:sort select='@DateTime'  order='ascending'/>
</xsl:apply-templates>

最後,將“<xsl:template match="Message">”和“</xsl:template>”之間的代碼用下面的語句包起來即可
<xsl:if test="From/User/@FriendlyName = $QueryName or To/User/@FriendlyName = $QueryName">
</xsl:if>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章