vb.net 控制台应用程序合并未知数量的 XML 文件,添加到集合时出现问题
vb.net console app merge unknown number of XML files, problems adding to collection
我正在尝试创建一个允许用户将文件 drag/drop 文件放入控制台的应用程序。控制台通过中介将路径馈送到 XmlTextReader
的集合中,然后根据 XmlReader
集合 .count
在 for 循环中填充 DataSet
集合,最后合并整个事情。
好吧,一切都很好,花花公子,直到我尝试 .add
到 XmlTextReader
列表,然后它以 error report from vbstudio
的形式抛出一个 NullReferenceException
我试图调查,但就是不明白。
我希望下面的代码包含所有必要的信息。
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
`
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)
它完成了完全相同的事情。
我正在尝试创建一个允许用户将文件 drag/drop 文件放入控制台的应用程序。控制台通过中介将路径馈送到 XmlTextReader
的集合中,然后根据 XmlReader
集合 .count
在 for 循环中填充 DataSet
集合,最后合并整个事情。
好吧,一切都很好,花花公子,直到我尝试 .add
到 XmlTextReader
列表,然后它以 error report from vbstudio
NullReferenceException
我试图调查,但就是不明白。 我希望下面的代码包含所有必要的信息。
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
`
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)
它完成了完全相同的事情。