[英]Parsing XML items listed in VB
我想從我指定的xml feed鏈接中獲取每個項目。 這是XML格式,
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
<title>Site title</title>
<link>http://www.blahblah.com</link>
<language>ru</language>
<description>This site rocks</description>
<generator>DataLife Engine</generator>
<item>
<title>Item no 1 title</title>
<guid isPermaLink="true">http://www.blahblah.com/item1</guid>
<link>http://www.blahblah.com/item1</link>
<description>Description of item 1</description>
<category>Category 0</category>
<dc:creator>admin</dc:creator>
<pubDate>Fri, 19 Sep 2014 08:00:00 +0000</pubDate>
</item>
<item>
<title>Item no 2 title</title>
<guid isPermaLink="true">http://www.blahblah.com/item2</guid>
<link>http://www.blahblah.com/item2</link>
<description>Description of item 2</description>
<category>Category 0</category>
<dc:creator>admin</dc:creator>
<pubDate>Fri, 19 Sep 2014 07:00:00 +0000</pubDate>
</item>
</channel>
</rss>
這是提要中的示例項目。 對於那里的每個<item></item>
,它都有自己的標題,描述和頁面鏈接。
我希望標題保留在TextBox 1中,TextBox 2中的鏈接,TextBox 3中的描述僅用於第一項。
通常,我希望將它們另存為字符串,以便可以使用這些字符串繼續執行我的代碼。
誰能幫我這個?
我已經嘗試過這樣的事情:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
File.Delete(paths)
If Not File.Exists(paths) Then
File.Create(paths).Dispose()
End If
Dim Lines() As String
Dim stringSeparators() As String = {vbCrLf}
Dim Source As String
Dim wc As New WebClient
Source = wc.DownloadString("http://blahblah.com/rss.xml")
File.WriteAllText(paths, Source)
xDoc.Load(paths)
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(xDoc.NameTable)
manager.AddNamespace("atom", "http://www.w3.org/2005/Atom")
Dim xnList As XmlNodeList = xDoc.SelectNodes("atom:feed/atom:entry", manager)
For Each xn As XmlNode In xnList
TextBox1.Text = xn.LocalName.ToString() + vbCrLf
Next
End Sub
這樣,我設法下載了整個文件並將其另存為字符串。 但是我真的無法完成最后一部分。 我不了解xml文件的工作原理,所以我認為這里的錯誤是在atom部分附近。
我想要的是讀取XML文件,然后將每個item
, TITLE
, LINK
和DESCRIPTION
在文本文件中。
像TITLE:LINK:DESCRIPTION
每行一項。 我上面的示例RSS可以進行2行。
我發現了2種不同的解決方案。
Imports System.IO
Imports System.Xml
Imports System.Net
Public Class Form1
WithEvents bs As New BindingSource
Dim paths As String = Application.StartupPath + "/eeeror.log"
Dim source As String = File.ReadAllText(paths)
Dim paths1 As String = Application.StartupPath + "/123.log"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
File.Delete(paths1)
If Not File.Exists(paths1) Then
File.Create(paths1).Dispose()
End If
Dim ds As New DataSet
Dim sr As System.IO.StringReader = New System.IO.StringReader(source)
ds.ReadXml(sr, XmlReadMode.InferSchema)
bs.DataSource =
(
From T In ds.Tables("item")
Select New Item With
{
.Description = T.Field(Of String)("description").Trim,
.Link = T.Field(Of String)("link").Trim,
.Title = T.Field(Of String)("title").Trim
}
).ToList
For Each i As Item In bs
Next
ds = Nothing
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim intITEMS As Integer = -1 'starting at -1 as array can work with (0)
For Each itemint As Item In bs
intITEMS += 1
MsgBox(intITEMS.ToString)
Dim item As Item = CType(bs.Item(intITEMS), Item)
File.AppendAllText(paths1, item.Title + ":" + item.Link + ":" + item.Description + vbCrLf)
Next
End Sub
End Class
Public Class Item
Public Property Title As String
Public Property Link As String
Public Property Description As String
Public Sub New()
End Sub
Public Overrides Function ToString() As String
Return String.Concat(Title, ", ", Description, ", ", Link)
End Function
End Class
這樣,您將獲得123.log文件中的行數= rss中的項。 不會有錯誤。
Imports System.IO
Imports System.Xml
Imports System.Net
Imports System.Text.RegularExpressions
Public Class Form1
Dim paths As String = Application.StartupPath + "/eeeror.log"
Dim source As String = File.ReadAllText(paths)
Dim paths1 As String = Application.StartupPath + "/123.log"
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
File.Delete(paths1)
If Not File.Exists(paths1) Then
File.Create(paths1).Dispose()
End If
Dim xmlString As String = My.Computer.FileSystem.ReadAllText(paths)
Using reader As XmlReader = XmlReader.Create(New StringReader(xmlString))
Dim itemcount As Integer = Regex.Matches(source, "<item>").Count
For i As Integer = 1 To itemcount + 1 '+1 because number <items> tag + with the title as it was included, this prevents craching
Dim title As String = ""
Dim link As String = ""
Dim description As String = ""
reader.ReadToFollowing("title")
title = reader.ReadElementContentAsString
reader.ReadToFollowing("link")
link = reader.ReadElementContentAsString
reader.ReadToFollowing("description")
description = reader.ReadElementContentAsString
File.AppendAllText(paths1, title + ":" + link + ":" + description + vbCrLf)
Next
End Using
End Sub
End Class
這將為您提供123.log =項目數+ 1,因為它也計算項目的標題,描述和鏈接。 當您要計算更多不同的元素時,它並不是那么可靠,因為某些元素可能不存在11次,並且可能會引發錯誤以及混淆數據
您以這種格式獲取數據,title:link:Description
您可以使用readalllines函數,然后通過':'分隔文本。 這是ac#代碼,用於分隔我為舊程序編寫的代碼,
string[] strArray = File.ReadAllLines(proxyDB);
int num = 0;
if (strArray.Length >= 1)
{
this.proxy_list = new string[strArray.Length];
foreach (string str in strArray)
{
string[] strArray3 = str.Split(new char[] { ':' });
this.proxy_list[num++] = str;
string proxy = strArray3(0)
string pass = strArray3(1)
}
}
這樣,您可以在列表視圖中指定它們,也可以在foreach中指定它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.