用vb.net写一个简易的RSS阅读器

简介: 先发一个做出来的效果图哈哈!怎么样?对了DUDU,我这个还解决了看天下那个阅读器不能正常显示相对路径的图片的问题哟!现在不管相对的还是绝对的路径的图片都能正常显示哈!下面是源代码,没有太多注释,因为都比较简单嘛! Imports System.
先发一个做出来的效果图
rssreader.JPG
哈哈!怎么样?对了DUDU,我这个还解决了看天下那个阅读器不能正常显示相对路径的图片的问题哟!
现在不管相对的还是绝对的路径的图片都能正常显示哈!

下面是源代码,没有太多注释,因为都比较简单嘛!
Imports  System.Xml
Imports  System.Threading

Public   Class Form1
    
Inherits System.Windows.Forms.Form
#Region 
" Windows 窗体设计器生成的代码 "

    Public Sub New()
        
MyBase.New()

        
'该调用是 Windows 窗体设计器所必需的。
        InitializeComponent()

        
'在 InitializeComponent() 调用之后添加任何初始化

    
End Sub


    
'窗体重写 dispose 以清理组件列表。
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        
If disposing Then
            
If Not (components Is NothingThen
                components.Dispose()
            
End If
        
End If
        
MyBase.Dispose(disposing)
    
End Sub


    
'Windows 窗体设计器所必需的
    Private components As System.ComponentModel.IContainer

    
'注意: 以下过程是 Windows 窗体设计器所必需的
    '可以使用 Windows 窗体设计器修改此过程。
    '不要使用代码编辑器修改它。
    Friend WithEvents ListBox1 As System.Windows.Forms.ListBox
    
Friend WithEvents Button1 As System.Windows.Forms.Button
    
Friend WithEvents AxWebBrowser1 As AxSHDocVw.AxWebBrowser
    
Friend WithEvents Label1 As System.Windows.Forms.Label
    
Friend WithEvents Label2 As System.Windows.Forms.Label
    
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    
Friend WithEvents StatusBar1 As System.Windows.Forms.StatusBar
    
Friend WithEvents Label4 As System.Windows.Forms.Label
    
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
        Me.ListBox1 
= New System.Windows.Forms.ListBox
        Me.Button1 
= New System.Windows.Forms.Button
        Me.AxWebBrowser1 
= New AxSHDocVw.AxWebBrowser
        Me.Label1 
= New System.Windows.Forms.Label
        Me.Label2 
= New System.Windows.Forms.Label
        Me.TextBox1 
= New System.Windows.Forms.TextBox
        Me.StatusBar1 
= New System.Windows.Forms.StatusBar
        Me.Label4 
= New System.Windows.Forms.Label
        
CType(Me.AxWebBrowser1, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        
'
        'ListBox1
        '
        Me.ListBox1.ItemHeight = 12
        Me.ListBox1.Location 
= New System.Drawing.Point(072)
        Me.ListBox1.Name 
= "ListBox1"
        Me.ListBox1.Size = New System.Drawing.Size(872124)
        Me.ListBox1.TabIndex 
= 0
        
'
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(7600)
        Me.Button1.Name 
= "Button1"
        Me.Button1.Size = New System.Drawing.Size(11272)
        Me.Button1.TabIndex 
= 1
        Me.Button1.Text 
= "读取"
        '
        'AxWebBrowser1
        '
        Me.AxWebBrowser1.Enabled = True
        Me.AxWebBrowser1.Location 
= New System.Drawing.Point(0208)
        Me.AxWebBrowser1.OcxState 
= CType(resources.GetObject("AxWebBrowser1.OcxState"), System.Windows.Forms.AxHost.State)
        Me.AxWebBrowser1.Size 
= New System.Drawing.Size(872512)
        Me.AxWebBrowser1.TabIndex 
= 2
        
'
        'Label1
        '
        Me.Label1.Location = New System.Drawing.Point(2432)
        Me.Label1.Name 
= "Label1"
        Me.Label1.Size = New System.Drawing.Size(72816)
        Me.Label1.TabIndex 
= 3
        Me.Label1.Text 
= "网站:"
        '
        'Label2
        '
        Me.Label2.Location = New System.Drawing.Point(2448)
        Me.Label2.Name 
= "Label2"
        Me.Label2.Size = New System.Drawing.Size(72816)
        Me.Label2.TabIndex 
= 4
        Me.Label2.Text 
= "描述:"
        '
        'TextBox1
        '
        Me.TextBox1.Location = New System.Drawing.Point(880)
        Me.TextBox1.Name 
= "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(66421)
        Me.TextBox1.TabIndex 
= 6
        Me.TextBox1.Text 
= "http://www.cnblogs.com/aowind/Rss.aspx"
        '
        'StatusBar1
        '
        Me.StatusBar1.Location = New System.Drawing.Point(0725)
        Me.StatusBar1.Name 
= "StatusBar1"
        Me.StatusBar1.Size = New System.Drawing.Size(87224)
        Me.StatusBar1.TabIndex 
= 7
        Me.StatusBar1.Text 
= "StatusBar1"
        '
        'Label4
        '
        Me.Label4.Location = New System.Drawing.Point(168)
        Me.Label4.Name 
= "Label4"
        Me.Label4.Size = New System.Drawing.Size(6416)
        Me.Label4.TabIndex 
= 8
        Me.Label4.Text 
= "RSS地址:"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(614)
        Me.ClientSize 
= New System.Drawing.Size(872749)
        Me.Controls.Add(Me.Label4)
        Me.Controls.Add(Me.StatusBar1)
        Me.Controls.Add(Me.TextBox1)
        Me.Controls.Add(Me.Label2)
        Me.Controls.Add(Me.Label1)
        Me.Controls.Add(Me.AxWebBrowser1)
        Me.Controls.Add(Me.Button1)
        Me.Controls.Add(Me.ListBox1)
        Me.Name 
= "Form1"
        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
        Me.Text 
= "简易RSS阅读器"
        CType(Me.AxWebBrowser1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(
False)

    
End Sub


#
End Region
    
Private thread As thread '定义一个线程
    Private Sub loadrss() '读取RSS文件并取出内容标题的过程
        StatusBar1.Text = "正在读取" & TextBox1.Text & "并效验"
        Me.loadxmltocache(TextBox1.Text)
        StatusBar1.Text 
= "正在读取相关网站信息"
        Me.loadtitle()
        StatusBar1.Text 
= "正在读取相RSS内容项"
        Me.loaditem()
        StatusBar1.Text 
= "完成"
    End Sub


    
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        
Try
            thread 
= New Thread(AddressOf loadrss)
            thread.Start()
        
Catch ex As Exception
            
MsgBox(ex.ToString)
        
End Try
    
End Sub


    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        AxWebBrowser1.Width 
= Me.Width
        StatusBar1.Text 
= "就绪"
    End Sub

    
Private Sub loadxmltocache(ByVal URL As String)
        
'读取RSS文件并存放在本地以供操作
        Dim xmldocument As New XmlDocument
        xmldocument.Load(URL)
        xmldocument.Save(Application.StartupPath 
& "~doc.xml")

    
End Sub

    
Private Sub loadtitle()
        
'从本地文件中进行操作,读取RSS中有关网站的信息
        Dim xmlDocument As New XmlDocument
        xmlDocument.Load(Application.StartupPath 
& "~doc.xml")
        
Dim mynodelist As XmlNodeList
        mynodelist 
= xmlDocument.SelectNodes("/rss/channel")
        Label1.Text 
= "网站:" & Trim(mynodelist(0).Item("title").InnerText())
        Label2.Text 
= "描述:" & Trim(mynodelist(0).Item("description").InnerText())
    
End Sub

    
Private Sub loaditem()
        
'从本地文件中进行操作,读取RSS中内容的标题及作者
        Dim xmlDocument As New XmlDocument
        xmlDocument.Load(Application.StartupPath 
& "~doc.xml")
        
Dim mynodelist As XmlNodeList
        mynodelist 
= xmlDocument.SelectNodes("/rss/channel/item")
        ListBox1.Items.Clear()
        
Dim i As Integer
        
For i = 0 To mynodelist.Count - 1
            ListBox1.Items.Add(
"[" & Trim(mynodelist(i).Item("dc:creator").InnerText()) & "]" & Trim(mynodelist(i).Item("title").InnerText()))
        
Next
    
End Sub


    
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        thread 
= New Thread(AddressOf loadhtml)
        thread.Start()
    
End Sub

    
Private Sub loadhtml()
        
'读取RSS中对应文件的内容并存到临时文件后显示
        Dim xmlDocument As New XmlDocument
        xmlDocument.Load(Application.StartupPath 
& "~doc.xml")
        
Dim mynodelist As XmlNodeList
        mynodelist 
= xmlDocument.SelectNodes("/rss/channel/item")
        
Dim i As Integer
        
Dim j As Boolean
        
Dim content As String
        StatusBar1.Text 
= "正在读取文章内容"
        For i = 0 To mynodelist.Count - 1
            
If ListBox1.SelectedItem = "[" & Trim(mynodelist(i).Item("dc:creator").InnerText()) & "]" & Trim(mynodelist(i).Item("title").InnerText()) Then
                content 
= content & "<html><head><meta http-equiv='content-type' content='text/html;charset=UTF-8'></head><body>"
                content = content & "<table width='100%' height='80' bgcolor='#eeeeee'><tr><td><b>标题:</b><a href='"
                content = content & Trim(mynodelist(i).Item("link").InnerText())
                content 
= content & "' target='_blank'>"
                content = content & Trim(mynodelist(i).Item("title").InnerText())
                content 
= content & "</a><br><b>作者:</b>"
                content = content & Trim(mynodelist(i).Item("dc:creator").InnerText())
                content 
= content & "</tb></tr></table>"
                content = content & formatHtml(mynodelist(i).Item("description").InnerText())
                content 
= content & "</body></html>"
                j = SaveTextFile(Application.StartupPath & "~temp.html", content)
                AxWebBrowser1.Navigate(Application.StartupPath 
& "~temp.html")
                
Exit For
            
End If
        
Next
        StatusBar1.Text 
= "完成"
    End Sub

    
'写文件的过程
    Function SaveTextFile(ByVal FilePath As StringByVal FileContent As StringAs Boolean
        
Dim sw As System.IO.StreamWriter
        
Try
            sw 
= New System.IO.StreamWriter(FilePath, False)
            sw.
Write(FileContent)
            
Return True
        
Catch e As Exception
            
Return False
        
Finally
            
If Not sw Is Nothing Then sw.Close()
        
End Try
    
End Function

    
'从地址里取网址的函数
    Private Function formatURL(ByVal str As StringAs String
        
Dim sStr As String
        
Dim i As Integer
        
Dim j As Integer
        
For i = 1 To Len(str)
            sStr 
= sStr & Mid(str, i, 1)
            
If Mid(str, i, 1= "/" Then
                j 
+= 1
            
End If
            
If j = 3 Then Exit For
        
Next
        
Return sStr
    
End Function

    
'将内容里的相对图片地址改成绝对地址的函数
    Private Function formatHtml(ByVal str As StringAs String
        
Return Replace(str"src=" & Chr(34& "/""src =" & Chr(34& formatURL(TextBox1.Text))
    
End Function

End Class

当然还有好多功能没完成,比如收藏RSS地址、是否已读、自动更新。
所以叫简易RSS阅读器嘛!参考一下!
相关文章
|
6月前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
101 5
|
机器学习/深度学习 算法 计算机视觉
EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning(论文阅读)(下)
说明 动机 贡献 方法 发现 EagleEye剪枝算法 实验 实验1- 相关性的定量分析 实验2-基于自适应BN的评估方法的通用性 实验3-从修剪候选中选择最佳修剪策略的计算成本 实验4-Effectiveness of our proposed method 总结与讨论
152 0
EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning(论文阅读)(下)
|
机器学习/深度学习 算法 计算机视觉
EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning(论文阅读)(上)
说明 动机 贡献 方法 发现 EagleEye剪枝算法 实验 实验1- 相关性的定量分析 实验2-基于自适应BN的评估方法的通用性 实验3-从修剪候选中选择最佳修剪策略的计算成本 实验4-Effectiveness of our proposed method 总结与讨论
187 0
EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning(论文阅读)(上)
|
Windows
利用.NET做“电子书阅读器”原来这么简单(其实你也可以做出金山词霸)
一、利用.NET做“电子书阅读器”原来这么简单 先下载组件:Interop.SpeechLib.dll  (http://files.cnblogs.com/waw/Interop.SpeechLib.
1191 0
|
并行计算 .NET C#
浅谈.NET下的多线程和并行计算(十三)CLR via C#第三版阅读笔记(2)
线程同步的问题 1) 我们必须找到代码中所有可能被多个线程同时访问的资源,然后使用线程同步来保护资源,并且我们没有办法来验证是不是正确进行了线程同步,包括是否有遗漏和是否对不需要同步的资源进行同步。 2) 线程同步是有损性能的,如果某个操作大量执行,并且这个操作原先的执行时间非常短,那么如果我们对这段操作前后进行锁的申请和释放的话性能可能下降一个数量级。
923 0
|
XML .NET C#
开发,配置,调用-三步走构建简单的asp.net webservice(C#)-适合初学者阅读
http://www.cnblogs.com/farrah/archive/2009/04/03/1429099.html   前两天,工作中遇到需要开发一个简单的webservice 网上搜索了不少文章,可是讲的很全面的还真是不多。
1199 0
|
XML 定位技术 C#
ASP.NET的SEO:Linq to XML---网站地图和RSS Feed
本系列目录网站地图的作用是让搜索引擎尽快的,更多的收录网站的各个网页。    这里我们首先要明白一个基本的原理,搜索引擎的爬行方式。整个互联网就像一张纵横交错的“网”:网的各个节点就是各个网页,而各个网页之间通过url相互连接。
1047 0