2013-08-12 2 views
0

У меня есть XML-строка или файл в vb.net. Мой вопрос: как вы получаете количество поколений, которое имеет узел (спускаясь вниз, внук, внук ...)?Как получить количество поколений узла?

Вот мой код:

Dim doc As New XmlDocument() 
doc.LoadXml(Str) 

Dim root As XmlNode = doc.SelectSingleNode("/ROOT/SUBCATEGORY") 

If root.HasChildNodes Then 
    Dim i As Integer 
    For i = 0 To root.ChildNodes.Count - 1 
     TextBox1.AppendText(root.ChildNodes(i).Name) 
     TextBox1.AppendText(vbTab) 
     TextBox1.AppendText(Number Of Generations) 
     TextBox1.AppendText(vbNewLine) 
    Next (i) 
End If 
+0

ли эту работой: 'root.SelectSingleNode (" макс (потомок :: * [не (*)]/кол (предок :: *)) ")'? Вы можете получить свойство 'Depth'. –

+0

@Asad Я получаю следующее: XPathException не было обработано '' max (descendant :: * [not (*)]/count (ancestor :: *)) ''имеет недопустимый токен. – Sam

ответ

0

XmlNodeReader класс имеет Depth свойство, которое может сказать вам всю глубину текущего узла, как это:

Dim doc As New XmlDocument() 
doc.LoadXml(Str) 

Dim deepestNodeLevel As Integer = 0 

Using nodeReader As New XmlNodeReader(doc) 
    While nodeReader.Read() 
     If nodeReader.Depth > deepestNode Then 
      deepestNodeLevel = nodeReader.Depth 
     End If 
    End While 
End Using 

Теперь после прохождения через всю В документе XML вы узнаете самую глубокую глубину (deepestNodeLevel) любого элемента в структуре.

Адаптирования это Опубликованный код, вы можете сделать это:

Dim doc As New XmlDocument() 
doc.LoadXml(Str) 

Using nodeReader As New XmlNodeReader(doc) 
    While nodeReader.Read() 
     TextBox1.AppendText(nodeReader.Name) 
     TextBox1.AppendText(vbTab) 
     TextBox1.AppendText(nodeReader.Depth.ToString()) 
     TextBox1.AppendText(vbNewLine) 
    End While 
End Using 
Смежные вопросы