嘿,我得到了好消息,我已经接近了解我需要做什么。我见过很多我以后可以使用的数据。但是现在我只需要或多或少地在这里获得进修课程。
我需要将元素写入数组。我知道那部分......但是在运行XML文件之前我不会知道数组的长度。所以该文件可能有1到超过9000(dbz)。我知道我需要一个for循环,我只是不知道如何很好地编写for循环。
我从书中得到了一些代码,但我看不出我是如何编辑它的。
Dim arraytester() As String
For i As Integer = 0 To arraytester.Length - 1
'little lost here
Next
那么我如何绕过arraytester.Length是一个问题,如果我不知道正在使用的文件的长度。
我如何将它添加到数组中,它只在我的书中显示输出。 (或者我可能只是失去了它)
答案 0 :(得分:7)
试试这个:
Dim mylist As New List(Of String)
Using document As XmlReader = XmlReader.Create("c:\PathToYourXmlFile.xml")
While (document.Read())
mylist.Add(document.ReadInnerXml.ToString)
End While
End Using
由于您使用的是While
循环结构,因此您不需要知道XML文件中的项目数量,也不需要对数组进行维度或重新维度,因为{{1}将根据需要增长。
注意:.NET 2.0及更高版本的通用数据结构比数组结构甚至.NET 1.x List(Of String)
数据结构更高效,更易于使用。
现在,如果你想循环遍历ArrayList
,那么你可以这样做:
mylist
答案 1 :(得分:3)
有很多方法可以在VB中调整数组的大小(参见ReDim
)但是在收集所有元素之前使用System.Collections.Generic.List(Of String)
可能更好(你可以用你想要的任何元素类型替换String)在您的数组中),然后您可以将结果转换为数组,如果您需要它作为数组。
Dim arraytester() As String
Dim accumulator As New System.Collections.Generic.List(Of String)
Do While Not input.EndOfStream
accumulator.Add(input.ReadLine())
Loop
arraytester = accumulator.ToArray()
鼓励这样做而不是重新调整数组大小以添加每个元素,因为每次添加元素时都必须重新分配整个数组。
答案 2 :(得分:1)
如果您使用LINQ,您可以构建xmlnodes集合并将其转换为数组而不知道数组的上限:
Dim xdoc As New Xml.XmlDocument()
xdoc.Load("test1.xml")
Dim nodes() As Xml.XmlNode = (From var In xdoc.SelectNodes("doc/members/member")
Let node = DirectCast(var, Xml.XmlNode)
Select node).ToArray