Отображение xml в виде дерева

У меня следующая структура XML

<?xml version="1.0" encoding="utf-8"?>
<rootnode>
  <Level 1>
    <Level 2>
      <Level 3>
      </Level 3>
    </Level 2>
    <Level 2>
      <Level 3>
      </Level 3>
    </Level 2>
  </Level 1>
  <Level 1>
    <Level 2>
      <Level 3>
      </Level 3>
    </Level 2>
  </Level 1>
</rootnode>

Я хочу отобразить эту XML-структуру в древовидном представлении, В лучшем случае для этого следует использовать XDocument.

Кто-нибудь может мне помочь?

«только название уровня 1,2,3», но в вашем образце есть имена только на уровне 5. Сделайте его более понятным. Включите имена, которые вы хотите, и имена, которые вы не хотите, укажите ожидаемый результат.

Henk Holterman 11.04.2018 13:42

Я хочу, чтобы имя Level1, Level2, Level3 было результатом

Hubii 11.04.2018 13:50

Измените вопрос, указав более четкие спецификации и примеры.

Henk Holterman 11.04.2018 13:51

что мне отредактировать? В результате я хочу получить список массивов со строками, в этом примере он должен выглядеть так: Level 1, Level2, Level3, Level 1, Level2, Level3, Level 1, Level2, Level3 ....

Hubii 11.04.2018 14:30

Начните с исправления XML (<Level 1> недействителен). Ваши теги открытия / закрытия не совпадают, поэтому имена не соответствуют фактическим уровням. Затем перечислите фактический результат и проясните возможные варианты.

Henk Holterman 11.04.2018 15:32
1
5
401
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте рекурсивный алгоритм:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;

namespace WindowsFormsApplication15
{
    public partial class Form1 : Form
    {
        const int MAX_LEVEL = 3;
        const string FILENAME = @"c:\temp\test.xml";
        public Form1()
        {
            InitializeComponent();

            XDocument doc = XDocument.Load(FILENAME);
            XElement root = doc.Root;

            TreeNode newNode = new TreeNode();
            newNode.Text = root.Name.LocalName;
            treeView1.Nodes.Add(newNode);
            int level = 1;
            AddRecursive(root, newNode, level);

            treeView1.ExpandAll();
        }
        public void AddRecursive(XElement element, TreeNode parent, int level)
        {
            foreach (XElement child in element.Elements())
            {
                TreeNode newNode = new TreeNode();
                newNode.Text = child.Name.LocalName;
                parent.Nodes.Add(newNode);
                if (level < MAX_LEVEL)
                {
                    AddRecursive(child, newNode, level + 1);
                }
            }
        }
    }
}

Другие вопросы по теме