Я написал некоторый код, который поможет вам превратить ваш путь в древовидную структуру.И имея такую структуру, вы можете преобразовать ее во все, что вам нужно.
Отказ от ответственности: я в основном люблю C #, так что это моя первая программа на VB.NET, написанная с помощью MSDN и кода VS2008 intellisense.Тем не менее, я надеюсь, что он будет служить вашим потребностям.
Ваш текст находится в xmlString
Private xmlString = "<root> " + _
" <object> " + _
"<path>root</path>" + _
" </object>" + _
" <object>" + _
"<path>root/sub1</path>" + _
" </object>" + _
" <object>" + _
"<path>root/sub1/item1</path>" + _
" </object>" + _
" <object>" + _
"<path>root/sub1/item2</path>" + _
" </object>" + _
" <object>" + _
"<path>root/sub2</path>" + _
" </object>" + _
" <object>" + _
"<path>root/sub2/item1</path>" + _
" </object>" + _
" <object>" + _
"<path>root/sub2/item2</path>" + _
" </object>" + _
"</root>"
Здесь я создаю класс, который будет представлять древовидную структуру
Class TreeNode
Public NodeName As String
Public Children As List(Of TreeNode)
Public Sub New(ByVal ANodeName As String)
NodeName = ANodeName
Children = New List(Of TreeNode)
End Sub
Public Function AddNodeIfNotExists(ByVal ANodeName As String) As TreeNode
For Each node As TreeNode In Children
If node.NodeName.Equals(ANodeName) Then
Return node
End If
Next
Dim newnode As TreeNode = New TreeNode(ANodeName)
Children.Add(newnode)
Return newnode
End Function
End Class
Инаконец, основная программа, которая создает дерево из вашего xml-кода
Sub Main()
Dim doc As XmlDocument
doc = New XmlDocument()
doc.LoadXml(xmlString)
Dim nodes As XmlNodeList
nodes = doc.DocumentElement.GetElementsByTagName("object")
Dim Tree As TreeNode = New TreeNode("global-root")
Dim Slider As TreeNode = Tree
For Each node As XmlNode In nodes
Dim s As String = node.SelectSingleNode("path").InnerText
Dim routes = s.Split("/")
For Each route As String In routes
Slider = Slider.AddNodeIfNotExists(route)
Next
Slider = Tree
Next
Console.Read()
End Sub
Вы можете проверить свое дерево, поместив эти строки прямо перед Console.Read ()
'Test your tree
Console.WriteLine(Tree.Children(0).NodeName = "root") 'true
Console.WriteLine(Tree.Children(0).Children(0).NodeName = "sub1") 'true
Console.WriteLine(Tree.Children(0).Children(0).Children(0).NodeName = "item1") 'true
Console.WriteLine(Tree.Children(0).Children(0).Children(1).NodeName = "item2") 'true
Console.WriteLine(Tree.Children(0).Children(1).NodeName = "sub2") 'true
Console.WriteLine(Tree.Children(0).Children(1).Children(0).NodeName = "item1") 'true
Console.WriteLine(Tree.Children(0).Children(1).Children(1).NodeName = "item2") 'true