下面的VB.Net代碼在移動到xml文件(sampler_01.xml)中的下一條記錄方面工作正常。如您所見,VB.Net代碼使用XPath。我遇到的問題是獲取任何邏輯與「上一個」按鈕(btnPrevious)一起工作並獲取以前的記錄。VB.Net,XPath和XMLReader - 下一個和上一個記錄
我真正想要做的是有能力移動到一個記錄旁邊或移回到先前的記錄。在這一點上,我不確定如何應用邏輯。任何建議或幫助將不勝感激。
謝謝!
編輯:請參考下面以 「Form1.vb的2.0」
「sampler_01.xml」
<?xml version="1.0" encoding="UTF-8"?>
<Companies>
<Company Id="000001">
<CompID>000001</CompID>
<ContFn>Jerry</ContFn>
<ContLn>McGuire</ContLn>
<ContEmail>[email protected]</ContEmail>
<ContPhone>(603) 555-1212</ContPhone>
</Company>
<Company Id="000002">
<CompID>000002</CompID>
<ContFn>Ben</ContFn>
<ContLn>Henderson</ContLn>
<ContEmail>[email protected]</ContEmail>
<ContPhone>(603) 882-4040</ContPhone>
</Company>
<Company Id="000003">
<CompID>000003</CompID>
<ContFn>Bob</ContFn>
<ContLn>James</ContLn>
<ContEmail>[email protected]</ContEmail>
<ContPhone>(603) 641-2120</ContPhone>
</Company>
<Company Id="000004">
<CompID>000004</CompID>
<ContFn>Aaron</ContFn>
<ContLn>Smith</ContLn>
<ContEmail>[email protected]</ContEmail>
<ContPhone>(603) 968-1212</ContPhone>
</Company>
</Companies>
「Form1.vb的1.0」
Imports System.Net
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Public Class Form1
Dim xpd As XPathDocument
Dim xpn As XPathNavigator
Dim xpn1, xpn2, xpn3, xpn4, xpn5 As XPathNodeIterator
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
LoadXmlToRead()
End Sub
Private Sub ListToTextBoxes()
txtCompID.Text = xpn1.Current.Value
txtContFn.Text = xpn2.Current.Value
txtContLn.Text = xpn3.Current.Value
txtContEmail.Text = xpn4.Current.Value
txtContPhone.Text = xpn5.Current.Value
End Sub
Private Sub LoadXmlToRead()
xpd = New XPathDocument("C:\XML_Files\sampler_01.xml")
xpn = xpd.CreateNavigator()
xpn1 = xpn.Select("/Companies/Company/CompID")
xpn2 = xpn.Select("/Companies/Company/ContFn")
xpn3 = xpn.Select("/Companies/Company/ContLn")
xpn4 = xpn.Select("/Companies/Company/ContEmail")
xpn5 = xpn.Select("/Companies/Company/ContPhone")
End Sub
Private Sub btnNext_Click(sender As System.Object, e As System.EventArgs) Handles btnNext.Click
If xpn1.MoveNext() Or _
xpn2.MoveNext() Or _
xpn3.MoveNext() Or _
xpn4.MoveNext() Or _
xpn5.MoveNext() Then
ListToTextBoxes()
Else
MsgBox("End of contacts has been reached...")
LoadXmlToRead()
End If
End Sub
Private Sub btnLoad_Click(sender As System.Object, e As System.EventArgs)Handles btnLoad.Click
LoadXmlToRead()
If txtCompID.Text = "" And _
txtContFn.Text = "" And _
txtContLn.Text = "" And _
txtContLn.Text = "" And _
txtContPhone.Text = "" Then
xpn1.MoveNext()
xpn2.MoveNext()
xpn3.MoveNext()
xpn4.MoveNext()
xpn5.MoveNext()
ListToTextBoxes()
MsgBox("The Contact database has been loaded")
End If
End Sub
Private Sub btnPrevious_Click(sender As System.Object, e As System.EventArgs) Handles btnPrevious.Click
If xpn1.Current.MoveToPrevious() Or _
xpn2.Current.MoveToPrevious() Or _
xpn3.Current.MoveToPrevious() Or _
xpn4.Current.MoveToPrevious() Or _
xpn5.Current.MoveToPrevious() Then
ListToTextBoxes()
End If
End Sub
End Class
你有一個特殊原因,不只是XML數據加載到某種形式的集合,只是與合作,而不是試圖對連續的XML工作? –
感謝Damien的回覆。我在這些實例上加載XML的原因是爲了能夠捕獲任何更新。上面的代碼我已經分解成更簡單的格式,以便其他人可以在本地級別上進行採樣,但實際上它從遠程服務器讀取XML。但是,我真的不明白這對XML持續有效嗎? –
嗨達米恩 - 順便說一下,我確實看到你的問題在哪裏,但XML文件可以達到約3 MEG。 XML Reader似乎工作得更快。如果您知道如何在不犧牲速度的情況下將其加載到集合中,請隨時指向該方向。我唯一的想法是通過序列化,但我還沒有得到那麼多,只是還沒有測試...再次,感謝您的回覆... –