2010-06-16 5 views
2

В древовидной структуре вы можете получить уровень элемента. Я пытаюсь выполнить то же самое, когда данный вход является объектом.Уровень возвращаемого узла иерархического xml

Данные XML я буду использовать для этого примера будет что-то вроде следующего

<?xml version="1.0" encoding="utf-8" ?> 
<Testing> 
    <Numbers> 
    <Number val="1"> 
     <Number val="1.1"> 
     <Number val="1.1.1"> 
      <Number val="1.1.2" /> 
      <Number val="1.1.3" /> 
      <Number val="1.1.4" /> 
     </Number> 
     </Number> 
     <Number val="1.2" /> 
     <Number val="1.3" /> 
     <Number val="1.4" /> 
    </Number> 
    <Number val="2" /> 
    <Number val="3" /> 
    <Number val="4" /> 
    </Numbers> 
    <Numbers> 
    <Number val="5" /> 
    <Number val="6" /> 
    <Number val="7" /> 
    <Number val="8" /> 
    </Numbers> 
</Testing> 

Это один пинает мой зад!

+0

Поскольку вы не используете System.Xml.Linq и класс 'XElement', это не LINQ to XML. – SLaks

ответ

5

Вы можете рекурсию родители элемента, например:

public static int GetLevel(this XObject node) { 
    if (node.Parent == null) return 0; 
    return 1 + node.Parent.GetLevel(); 
} 

Или без рекурсии:

public static int GetLevel(this XObject node) { 
    int level = 0; 
    while (null != (node = node.Parent)) 
     level++; 

    return level; 
} 
+0

Я только заметил, что мой объект ввода - это ObservableCollection , и это делает синтаксис наподобие .Parent недоступен. – Ryan

+0

Затем, на какой узел вы хотите родительский? – SLaks

+0

Каждый ObservableCollection имеет 2 свойства: Number1 & val. Если Number1.Count> 0, то Number1 имеет ObservableCollection и так далее. Надеюсь, это имеет смысл. Я использовал Xsd2Code для создания этого класса автоматически. – Ryan

Смежные вопросы