Vb.net 从文本向列表框添加多个字符串

Vb.net 从文本向列表框添加多个字符串,vb.net,visual-studio-2010,text,listbox,Vb.net,Visual Studio 2010,Text,Listbox,我有一个文本文件,我需要从中获取多个字符串,我可以这样做,但它只显示列表框中的第一个字符串 当我们尝试使用XML reader时,它会收集XML中标记为对象标识符的所有内容以及相机 我需要寻找类似以下的行,可能有任何数量 对象标识符=“./Cameras/MyCamera”Label=“标准摄像机”Name=“MyCamera”Type=“摄像机” 关键标识符: /摄像机/ Label=“标准照相机” Type=“照相机” 我可以在./Cameras/或Name=“MyCamera”之后使用“M

我有一个文本文件,我需要从中获取多个字符串,我可以这样做,但它只显示列表框中的第一个字符串

当我们尝试使用XML reader时,它会收集XML中标记为对象标识符的所有内容以及相机

我需要寻找类似以下的行,可能有任何数量

对象标识符=“./Cameras/MyCamera”Label=“标准摄像机”Name=“MyCamera”Type=“摄像机”

关键标识符:

/摄像机/

Label=“标准照相机”

Type=“照相机”

我可以在./Cameras/或Name=“MyCamera”之后使用“MyCamera”,这两个词在每一行中都很常见 在我下面的例子中,它有一个我想读的文件,它应该列出3个摄像头

XML是由渲染生成的,它是带有模型、灯光等的场景文件,因此它只保留相机和一些核心设置

感谢varocarbas,这是解决我问题的代码:

Dim path As String = "C:\Users\jen\Desktop\test\temp.xml"
    Dim settings As System.Xml.XmlReaderSettings = New System.Xml.XmlReaderSettings()
    settings.ConformanceLevel = System.Xml.ConformanceLevel.Fragment
    Using reader As System.Xml.XmlReader = System.Xml.XmlReader.Create(path)
        While (reader.Read())
            If (reader.NodeType = System.Xml.XmlNodeType.Element) Then
                If (reader.Name = "Object") Then

                    'Object Identifier="./Cameras/MyCamera" Label="Standard Camera" Name="MyCamera" Type="Camera"
                    Dim Identifier As String = reader.GetAttribute("Identifier") '"./Cameras/MyCamera"
                    Dim Label As String = reader.GetAttribute("Label") '"Standard Camera"
                    Dim Name As String = reader.GetAttribute("Name") '"MyCamera"
                    Dim Type As String = reader.GetAttribute("Type") '"Camera"

                    Dim wholeString As String = Name  'WHOLE STRING TO BE ADDED TO THE LISTBOX

                    'Adding the string to ListBox1
                    If (wholeString.Trim.Length > 0) And Type = "Camera" Then
                        ListBox1.Items.Add(wholeString)
                    End If


                End If
            End If
        End While
    End Using

您可以使用我在中提出的
XMLReader
,并对其进行以下修改:

Dim path As String = "temp.txt"
Dim settings As System.Xml.XmlReaderSettings = New System.Xml.XmlReaderSettings()
settings.ConformanceLevel = System.Xml.ConformanceLevel.Fragment
Using reader As System.Xml.XmlReader = System.Xml.XmlReader.Create(path)
    While (reader.Read())
        If (reader.NodeType = System.Xml.XmlNodeType.Element) Then
            If (reader.Name = "Object") Then

                'Object Identifier="./Cameras/MyCamera" Label="Standard Camera" Name="MyCamera" Type="Camera"
                Dim Identifier As String = reader.GetAttribute("Identifier") '"./Cameras/MyCamera"
                Dim Label As String = reader.GetAttribute("Label") '"Standard Camera"
                Dim Name As String = reader.GetAttribute("Name") '"MyCamera"
                Dim Type As String = reader.GetAttribute("Type") '"Camera"

                Dim wholeString As String = Identifier & " - " & Label & " - " & Name & " - " & Type 'WHOLE STRING TO BE ADDED TO THE LISTBOX

                'Adding the string to ListBox1
                If (wholeString.Trim.Length > 0) Then
                    ListBox1.Items.Add(wholeString)
                End If


            End If
        End If
    End While
End Using

此代码检索所有需要的信息,并将其存储在
LisBox1
中,方法是将每个元素用“-”隔开。这是足够多的信息,您应该是执行任何进一步更改的人,例如:将“/Cameras/MyCamera”转换为“/Cameras/”(在我以前的代码中有一个如何执行此操作的指示);或者更改不同项目在
列表框中的显示方式(或者您希望每个元素包含一个列表框:一个用于标识符,另一个用于标签等)。

字符串不是数组。在C#中是字符串[]。不太清楚VB。那么这个数组就是datasource@BlamVB.NET的等价项是String(),但实际上他并没有返回数组,而是返回一个字符串,只要它不返回由split生成的数组,而是它的一个位置。事实上,他过于复杂化了,使用了两次拆分,并返回了第二次拆分操作产生的第一个位置。谢谢,但我不想在““Label”之后出现文本。在“/Cameras/Camera”Label中,它只是单词Camera和文本中的任何其他单词,如果它使生活更轻松,我可以做一个简单的示例吗?再次感谢这里只有一个例子####当前视图#。摄像机,摄像机2应该出现在list@NigeC你的方法有很多问题。首先,您将整个文件视为一个字符串,因此永远无法获得所需的性能;你得一行一行地走。此外,处理XML文件的最佳方法是System.XML;事实上,这个例子对我来说很熟悉:)我没有回答之前与XML相关的问题吗?无论如何我会用一个简短的例子更新我的答案,告诉你如何以你想要的方式面对问题;但是,在你的位置上,我会开始一步一步地做事情,而不是在不理解代码的情况下使用代码。@NigeC我现在已经阅读了我之前关于XMLReader的答案,毫无疑问,它代表了这个问题的最佳解决方案。split所做的是根据特定字符/字符集分割一个字符串。示例:1,2,3->split(',')返回一个包含3个元素的数组。如果“分隔字符”的定义清晰,文本结构不太复杂,那就可以了,否则就不是最好的方法。在您的情况下,仅使用拆分无法获得任何结果,您必须在每次拆分后进行字符串分析。XMLReader让事情变得更加简单。@NigeC你能解释一下你想要得到的确切输出吗(只说“仅限当前视图”。摄像头,摄像头2”不太具有描述性)以及为什么不使用建议的XML选项?转到要检索的第一行,准确说出要包含在listview中的单词。