Member 14512875 Ответов: 1

Как разобрать XML в treeview in ASP.NET сердечник


У меня есть xml-файл, и я хочу разобрать его в виде дерева или в иерархическом представлении.

Что я уже пробовал:

XmlDataDocument xmldoc = новый XmlDataDocument();
Руководство руководство;
FileStream fs = новый FileStream("tree.xml", FileMode.Открытия, Флагами Fileaccess.Читать);
xmldoc.Нагрузки(ФС);
xmlnode = xmldoc.ChildNodes[1];

ZurdoDev

Большинство элементов управления древовидного представления принимают xml-документы в качестве источника данных. Где ты застрял?

1 Ответов

Рейтинг:
1

RickZeeland

Боюсь, что "автоматического" способа нет, но вы можете использовать набор данных, как в этом примере Winforms:

/// <summary>
/// Populate a treeview from an XML file using a DataSet.
/// </summary>
public partial class FormTreeview : Form
{
    DataSet ds;
    string xmlpath = @"test.xml";

    public FormTreeview()
    {
        InitializeComponent();

        ds = new DataSet();
        ds.ReadXml(xmlpath);
        int index = 0;

        // Traverse the rows
        foreach (DataRow ns in ds.Tables[0].Rows)
        {
            index++;
            Debug.Print($"{ns[0]} {ns[1]} {ns[2]}");
            string id = ns[2].ToString();

            if (id == "0")
            {
                TreeNode parentNode = treeView1.Nodes.Add(ns[1].ToString());
                PopulateChildNodes(index, parentNode, ns[0].ToString());
            }
        }

        this.treeView1.ExpandAll();
    }

    private void PopulateChildNodes(int index, TreeNode parent, string id)
    {
        if (parent.GetNodeCount(false) == 0)
        {
            // Traverse the settings rows and add settings if they exist
            foreach (DataRow setting in ds.Tables[1].Rows)
            {
                if (id == setting[3].ToString())
                {
                    Debug.Print($"        {setting[0]} {setting[1]} {setting[2]} {setting[3]}");
                    parent.Nodes.Add($"{setting[0]}: {setting[2]}");
                }
            }
        }

        // Traverse the rows
        for (int i = index; i < ds.Tables[0].Rows.Count; i++)
        {
            DataRow ns = ds.Tables[0].Rows[i];

            if (id == ns[2].ToString())
            {
                Debug.Print($"    {ns[0]} {ns[1]} {ns[2]}");
                TreeNode childNode = parent.Nodes.Add(ns[1].ToString());
                PopulateChildNodes(index, childNode, ns[0].ToString());
            }
        }
    }
}