代码之家  ›  专栏  ›  技术社区  ›  Milos Grujic

vb.net控制台应用程序合并未知数量的XML文件,添加到集合时出现问题

  •  -1
  • Milos Grujic  · 技术社区  · 9 年前

    我正在尝试创建一个应用程序,允许用户将文件拖放到控制台中。控制台通过中介将路径馈送到 XmlTextReader 这反过来又填满了 DataSet 基于的for循环中的集合 XmlReader 收集 .count 最后把整个事情合并起来。 在我尝试之前,一切都很好 .add XML文本读取器 列表,然后抛出 NullReferenceException 形式为 error report from vbstudio

    我试过调查,但就是不明白。 我希望下面的代码包含了所有必要的信息。

    Imports System.Xml
    Module Module1
    
        Sub Main()
            Dim input As String
            Dim nl As String = Environment.NewLine
            Dim xml_files As List(Of XmlTextReader)
            Dim xml_ds As List(Of DataSet)
            Dim ds_sum As DataSet
    
            Do While input <> "merge"
                Console.WriteLine("--- drag & drop file to  be merged---" + nl)
                input = Console.ReadLine()
                If input <> "merge" Then 
                    Dim xml__ As New XmlTextReader(input)
                    xml_files.Add(xml__) ' this is th plce that throws the exception 
                    'xml_files.Add(New XmlTextReader(input))  something i tried
                    Console.WriteLine(nl & "--- drag & drop new file or order  merge ---" & nl)
                ElseIf input = "merge" Then
                    ' ▼ ▼ ▼ ▼  read datasets to collection ▼ ▼ ▼ ▼
                    For i = 0 To xml_files.Count - 1
                        Dim ds As New DataSet ' mediator
                        ds.ReadXml(xml_files(i)) ' read one-by-one xml 
                        xml_ds.Add(ds) 'i ubacuje u kolekciju xml_ds
                    Next
                End If
            Loop
            ' ▼ ▼ ▼ ▼ ovde sad ide XML MERGE ▼ ▼ ▼ ▼
            ds_sum = xml_ds(0)
    
            For i = 1 To xml_ds.Count
                ds_sum.Merge(xml_ds(i))
            Next
            ' ▼ ▼ ▼ ▼ ispis xml-a ▼ ▼ ▼ ▼
            Console.WriteLine(nl & "--- direktorijum u koji zelis da sacuvas sabrani XML Prevuci u terminal ---" & nl)
            input = Console.ReadLine()
            ds_sum.WriteXml(input)
        End Sub
    End Module
    

    `

    1 回复  |  直到 6 年前
        1
  •  0
  •   David Wilson    9 年前
    Dim xml_files As List(Of XmlTextReader)
    

    仅将xml_files声明为可以包含作为XmlTextReader列表的对象的对象。它不会初始化它。你可以用手写打字

    Dim xml_files As List(Of XmlTextReader) = New List(Of XmlTextReader)
    

    它声明对象并为其分配一个新的初始化列表,但您可以编写

    Dim xml_files As New List(Of XmlTextReader)
    

    它完成了完全相同的事情。