1

嘿,我得到了好消息,我即将了解我需要做什么。我看到了很多我以后可以使用的数据。但是现在我只需要或多或少地获得一个进修课程。

我需要将元素写入数组。我知道那部分......但在我运行 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 的问题。

还有我如何将它添加到数组中,它只是在我的书中显示输出。(或者也许我只是失去了它)

4

3 回答 3

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 文件中的项目数量,也不需要对数组进行标注或重新标注,因为它List(Of String)会根据需要增长。

注意: .NET 2.0 和更高版本的通用数据结构比数组结构甚至 .NET 1.xArrayList数据结构更有效且更易于使用。

现在,如果你想循环mylist,那么你可以这样做:

For Each item As String In mylist
    MessageBox.Show(item)
Next
于 2013-10-28T17:38:06.123 回答
3

有一些方法可以在 VB 中调整数组大小(请参阅ReDim),但最好使用 aSystem.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()

鼓励这样做而不是重新调整数组的大小以添加每个元素,因为每次添加元素时都必须重新分配整个数组。

于 2013-10-28T17:41:54.047 回答
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
于 2013-10-28T18:38:06.493 回答