vb.net 读取 XML 文件
vb.net Reading XMLFile
我有一个巨大的 XML 文件(20'000 行),我想从中读取一些数据。
我现在已经写了一个例程。我的问题是,有没有办法让它看起来更好?因为我认为这是从文件中获取数据的丑陋方式。
这是我的 XML 文件的结构
<List
<Header>
</>
<Root>
<Items>
<Object>
<Items>
<Object>
<Items>
<Object>
<Items>
<Object>
<IoItems>
<IoObject>
</>
</>
</>
</>
<IoItems>
<IoObject>
</>
</>
</>
<Object>
</>
<Object>
</>
<Object>
</>
</>
</>
<Object>
//Like the Object above
</>
<StructureObject>
//Like the Object above
</>
</>
</>
</>
</>
我的代码是这样的:
Dim myXMLDoc As New XmlDocument
Dim Node As XmlNode
Dim Node2 As XmlNode
Dim Node3 As XmlNode
Dim Node4 As XmlNode
Dim Node5 As XmlNode
Dim Node6 As XmlNode
Dim Node7 As XmlNode
Dim Node8 As XmlNode
Dim Node9 As XmlNode
Dim Node10 As XmlNode
Dim Node11 As XmlNode
myXMLDoc.Load("H:\Data.xml")
Dim root As XmlNode = myXMLDoc.GetElementsByTagName("Root")(0)
For Each Node In root.ChildNodes
If Node.Name = "Items" Then
For Each Node2 In Node.ChildNodes
If Node2.Name = "Object" Then
For Each Node3 In Node2.ChildNodes
If Node3.Name = "Items" Then
For Each Node4 In Node3.ChildNodes
If Node4.Name = "Object" Then
For Each Node5 In Node4.ChildNodes
If Node5.Name = "Items" Then
For Each Node6 In Node5.ChildNodes
If Node6.Name = "Object" Then
For Each Node7 In Node6.ChildNodes
If Node7.Name = "Items" Then
For Each Node8 In Node6.ChildNodes
If Node8.Name = "Object" Then
For Each Node9 In Node8.ChildNodes
If Node9.Name = "IoItems" Then
For Each Node10 In Node9.ChildNodes
If Node10.Name = "IoObject" Then
MsgBox(Node10.Value)
End If
Next
End If
Next
End If
Next
ElseIf Node6.Name = "IoItems" Then
For Each Node11 In Node6.ChildNodes
If Node11.Name = "IoObject" Then
MsgBox(Node11.Value)
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
如果 myXMLDoc 是一个 XMLDOM 对象,您可以找到每个标记链:
Set nodes = root.selectNodes("Items/Object/Items/Object/.../IoObject")
For Each Node In nodes
' do something
Next
它适用于 CreateObject("MSXML.DOMDocument")
的 VBScript。未在 VB.NET.
中查看
您的尝试应该会立即告诉您您做错了什么。如果您似乎需要 4 个或更多的源代码嵌套级别,您应该向后靠并反思您实际尝试做的事情。您绝对不应该继续创建嵌套 21 层的代码。
您缺少 XPath,XML selection 语言。它可以很容易地select您感兴趣的节点。
Dim myXMLDoc As New XmlDocument
' load some XML into myXMLDoc...
For Each ioObject As XmlNode In myXMLDoc.SelectNodes("//IoObject")
Console.WriteLine(ioObject.InnerXml)
Next ioObject
您可以定义更复杂的路径 select 完全 您想要的节点。
在 VB.NET 中处理 XML 的最简单方法是使用 XElement
而不是 XmlDocument
和 XML 文字(至少大部分时间).
所以要获取所有 <IoObject>
元素,只需使用
Dim xml = XElement.Load("H:\Data.xml")
For Each node In xml...<IoObject>
MsgBox(node.Value)
Next
我有一个巨大的 XML 文件(20'000 行),我想从中读取一些数据。 我现在已经写了一个例程。我的问题是,有没有办法让它看起来更好?因为我认为这是从文件中获取数据的丑陋方式。
这是我的 XML 文件的结构
<List
<Header>
</>
<Root>
<Items>
<Object>
<Items>
<Object>
<Items>
<Object>
<Items>
<Object>
<IoItems>
<IoObject>
</>
</>
</>
</>
<IoItems>
<IoObject>
</>
</>
</>
<Object>
</>
<Object>
</>
<Object>
</>
</>
</>
<Object>
//Like the Object above
</>
<StructureObject>
//Like the Object above
</>
</>
</>
</>
</>
我的代码是这样的:
Dim myXMLDoc As New XmlDocument
Dim Node As XmlNode
Dim Node2 As XmlNode
Dim Node3 As XmlNode
Dim Node4 As XmlNode
Dim Node5 As XmlNode
Dim Node6 As XmlNode
Dim Node7 As XmlNode
Dim Node8 As XmlNode
Dim Node9 As XmlNode
Dim Node10 As XmlNode
Dim Node11 As XmlNode
myXMLDoc.Load("H:\Data.xml")
Dim root As XmlNode = myXMLDoc.GetElementsByTagName("Root")(0)
For Each Node In root.ChildNodes
If Node.Name = "Items" Then
For Each Node2 In Node.ChildNodes
If Node2.Name = "Object" Then
For Each Node3 In Node2.ChildNodes
If Node3.Name = "Items" Then
For Each Node4 In Node3.ChildNodes
If Node4.Name = "Object" Then
For Each Node5 In Node4.ChildNodes
If Node5.Name = "Items" Then
For Each Node6 In Node5.ChildNodes
If Node6.Name = "Object" Then
For Each Node7 In Node6.ChildNodes
If Node7.Name = "Items" Then
For Each Node8 In Node6.ChildNodes
If Node8.Name = "Object" Then
For Each Node9 In Node8.ChildNodes
If Node9.Name = "IoItems" Then
For Each Node10 In Node9.ChildNodes
If Node10.Name = "IoObject" Then
MsgBox(Node10.Value)
End If
Next
End If
Next
End If
Next
ElseIf Node6.Name = "IoItems" Then
For Each Node11 In Node6.ChildNodes
If Node11.Name = "IoObject" Then
MsgBox(Node11.Value)
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
如果 myXMLDoc 是一个 XMLDOM 对象,您可以找到每个标记链:
Set nodes = root.selectNodes("Items/Object/Items/Object/.../IoObject")
For Each Node In nodes
' do something
Next
它适用于 CreateObject("MSXML.DOMDocument")
的 VBScript。未在 VB.NET.
您的尝试应该会立即告诉您您做错了什么。如果您似乎需要 4 个或更多的源代码嵌套级别,您应该向后靠并反思您实际尝试做的事情。您绝对不应该继续创建嵌套 21 层的代码。
您缺少 XPath,XML selection 语言。它可以很容易地select您感兴趣的节点。
Dim myXMLDoc As New XmlDocument
' load some XML into myXMLDoc...
For Each ioObject As XmlNode In myXMLDoc.SelectNodes("//IoObject")
Console.WriteLine(ioObject.InnerXml)
Next ioObject
您可以定义更复杂的路径 select 完全 您想要的节点。
在 VB.NET 中处理 XML 的最简单方法是使用 XElement
而不是 XmlDocument
和 XML 文字(至少大部分时间).
所以要获取所有 <IoObject>
元素,只需使用
Dim xml = XElement.Load("H:\Data.xml")
For Each node In xml...<IoObject>
MsgBox(node.Value)
Next