Получить глубину предмета - PullRequest
5 голосов
/ 05 февраля 2010

У меня есть xml вот так:

<A><B>test</B><B><B>test2</B></B><B><B><B>test2</B></B></B></A>

Как я могу получить уровень каждого из этих предметов, используя linq to xml

уровень теста = 1 уровень теста2 = 2 уровень теста3 = 3

Я понятия не имею, сколько будет узлов или сколько будет уровней. Я могу написать это как рекурсивную функцию, но я подумал, что linq to xml может предложить что-то лучшее.

Ответы [ 2 ]

6 голосов
/ 05 февраля 2010

Предполагается, что вы загрузили XML как объект XDocument или XElement,

myXElement.AncestorsAndSelf().Count()

должно дать вам глубину любого данного элемента.

0 голосов
/ 06 февраля 2010

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

var depths =
  root.
    DescendantNodesAndSelf().
    Where(e => e.NodeType == XmlNodeType.Text).
    Select(n => new { Text = n.ToString(), Depth = n.Parent.Ancestors().Count()});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...