我有一个丑陋的 XML 块,我试图在 VB.net 中解析它。基本上,我需要找到一个特定的节点,然后开始抓取该特定节点中的所有信息,这些信息隐藏在更深的几个节点中。我可以构造一些东西来找到我想要的节点并将其子节点选择到节点列表中。然后我可以遍历该节点列表并从该节点列表中提取属性,但我似乎无法找到一种方法来根据选定的节点创建一个新的节点列表。我已经搜索并没有找到答案,所以我认为我在做一些根本上愚蠢的事情。我基本上需要获取<SixithLayer>
和更深层次的所有信息并解析它,但我只能从<SixithLayer>
我的代码:
Imports System
Imports System.IO
Imports System.Xml
Public Class Form1
Sub ExampleXML()
Dim my_XML_doc As XmlDocument = New XmlDocument
Dim first_node_list As XmlNodeList
Dim second_node_list As XmlNodeList
my_XML_doc.Load("C:\temp\xmlExample.xml")
first_node_list = my_XML_doc.SelectNodes("/FirstLayer/SecondLayer/ThirdLayer//FourthLayer[@Type='Type D']//FifthLayer/*")
For Each node In first_node_list
Dim grab_first_layer_info = node.Attributes.GetNamedItem("Name").Value
second_node_list = node.SelectNodes("ImportantInfo")
For Each node2 In second_node_list
Dim grab_second_layer_info = node.Attributes.GetNamedItem("Name").Value
'Some more for looping here to get all the attributes and and innerXML values hidden in here
'unless there is a better way to quickly grab stuff that might be a variable
'number of nodes deeper with varied names.
Next
Next
End Sub
End Class
我的 XML
<FirstLayer>
<SecondLayer>
<ThirdLayer>
<FourthLayer Type="Type A" Name="FirstName"></FourthLayer>
<FourthLayer Type="Type B" Name="SecondName"></FourthLayer>
<FourthLayer Type="Type C" Name="ThirdName"></FourthLayer>
<FourthLayer Type="Type D" Name="FourthName">
<FifthLayer>
<SixthLayer Type="Step" Name="First">
<SomeJunk></SomeJunk>
<ImportantInfo Name="1stImportantStuff">
<StoreValue>
<Value>500</Value>
</StoreValue>
<MoreStuff Flavor="Purple" Look="Chocolate">
<Value>29</Value>
</MoreStuff>
</ImportantInfo>
<ImportantInfo Name="2ndImportantStuff">
<StoreValue>
<Value>TRUE</Value>
</StoreValue>
</ImportantInfo>
<ImportantInfo Name="3rdImportantStuff">
<StoreValue>
<Value>Cat</Value>
</StoreValue>
</ImportantInfo>
</SixthLayer>
<SixthLayer Type="Step" Name="Second">
<SomeJunk></SomeJunk>
<ImportantInfo Name="1stImportantStuff">
<StoreValue>
<Value>500</Value>
</StoreValue>
</ImportantInfo>
<ImportantInfo Name="2ndImportantStuff">
<StoreValue>
<Value>TRUE</Value>
</StoreValue>
</ImportantInfo>
<ImportantInfo Name="3rdImportantStuff">
<StoreValue>
<Value>Cat</Value>
</StoreValue>
</ImportantInfo>
</SixthLayer>
</FifthLayer>
</FourthLayer>
</ThirdLayer>
</SecondLayer>
</FirstLayer>
谢谢你的帮助。
编辑:修复它,以便第二个循环按照下面的评论工作。不知道我是如何做到如此彻底地错过的。除了循环越来越深之外,是否还有更好的方法来获取所有属性和内部文本信息<ImportantStuff>
,但这是一个很好的开始。谢谢您的帮助。