Answer the question
In order to leave comments, you need to log in
C# Xml How to array corresponding tree elements?
Hello! I can't solve the annoying problem. Given the tree structure:
<head>
<block1>
<block_header></block_header>
<block_picture></block_picture>
<block_text></block_text>
</block1>
<block2></block2>
<block3>
<block_header></block_header>
<block_picture></block_picture>
<block_text></block_text>
</block3>
</head>
Answer the question
In order to leave comments, you need to log in
Take head and iterate over the child nodes that can be found in the ChildNodes property :
var xml = @"<head>
<block1>
<block_header></block_header>
<block_picture></block_picture>
<block_text></block_text>
</block1>
<block2></block2>
<block3>
<block_header></block_header>
<block_picture></block_picture>
<block_text></block_text>
</block3>
</head>";
var doc = new XmlDocument();
doc.LoadXml(xml);
var head = doc.SelectSingleNode("/head");
var list = new List<string>();
foreach (XmlNode node in head.ChildNodes)
{
list.Add(node.Name);
// node.InnerXml - содержимое узла
Console.WriteLine("{0}={1}", node.Name, node.InnerXml);
}
// в коллекции list будет список имен дочерних узлов корневого узла
var doc = new XmlDocument();
// определение переменной xml см. в предыдущем коде
doc.LoadXml(xml);
// создаем стек
var stack = new Stack<XmlNode>();
// добавляем в стек корневой элемент
stack.Push(doc.SelectSingleNode("/head"));
// var list = new List<string>();
// перебираем все элементы стека
while(stack.Count > 0)
{
// берем верхний элемент и удаляем его и стека
var node = stack.Pop();
// выводим
// если требуется, можно добавить в коллекцию
// list.Add(node.Name);
Console.WriteLine("Node: {0}, childs: {1}", node.Name, node.ChildNodes.Count);
Console.WriteLine(node.InnerXml);
// если есть дети, добавляем их в стек
if (node.ChildNodes.Count > 0)
{
// берем с конца, чтобы сохранить порядок
for (int i = node.ChildNodes.Count - 1; i >= 0; --i)
{
stack.Push(node.ChildNodes[i]);
}
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question