如何在c#中读取XML文件并在xaml / c中生成动态按钮/扩展器#

时间:2016-11-25 09:01:24

标签: c# xml wpf

我是WPF的新手。 我得到一个项目,我应该创建一个WPF应用程序。我必须阅读一个XML文件并使用Expander或Buttons创建一个动态菜单,具体取决于XML文件的内容。

这是我的XML文件:

<PROFIL_1009_L>
<SAPNR VALUE="1009"/>
<DESCR value="Name"/>
<BAUTYP value="L"/>
<FILE value="Filepath"/>
</PROFIL_1009_L>
<!-- ======================================================= -->
<PROFIL_1009_M>
<SAPNR VALUE="1009"/>
<DESCR value="Name">
<BAUTYP value="M"/>
<FILE value="Filepath"/>
<TECHNPLATZ_01>
<TPLNR value="0001"/>
<STRNO value="SAPLineName01"/>
<PLTXT value="LineName1"/>
</TECHNPLATZ_01>
<TECHNPLATZ_02>
<TPLNR value="0002"/>
<STRNO value="SAPLineName02"/>
<PLTXT value="LineName2"/>
</TECHNPLATZ_02>
<TECHNPLATZ_03>
<TPLNR value="003"/>
<STRNO value="SAPLineName03"/>
<PLTXT value="LineName3"/>
</TECHNPLATZ_03>
</PROFIL_1009_M>
<!-- ======================================================= -->
<PROFIL_1009_V>
<SAPNR VALUE="1009"/>
<DESCR value="Name>
<BAUTYP value="V"/>
<FILE value="Filepath"/>
</PROFIL_1009_V>

有不同的值可以是A,M,L或V. 有时会有孩子。

我的想法是创建一个像这样的可折叠菜单。

    • 名称
      • LineName1
      • LineName2
    • 名称
  • 中号
    • 名称
      • Linename1
  • V

如何阅读此XML文件以使用此信息创建这样的菜单?

1 个答案:

答案 0 :(得分:0)

使用像这样的树视图

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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const string FILENAME = @"c:\temp\test.xml";
        public Form1()
        {
            InitializeComponent();

            XElement bautyp = null;
            XElement file = null;
            XDocument doc = XDocument.Load(FILENAME);

            List<XElement> profils = doc.Descendants().Where(x => x.Name.LocalName.StartsWith("PROFIL_1009")).ToList();

            foreach (XElement profil in profils)
            {
                TreeNode newNode =  treeView1.Nodes.Add(profil.Name.LocalName);

                XElement sapnr = profil.Element("SAPNR");
                if(sapnr != null)
                {
                    newNode.Nodes.Add(string.Join(" : ",new string[] {"SAPNR", (string)sapnr.Attribute("VALUE")}));
                }
                XElement descr = profil.Element("DESCR");
                if (descr != null)
                {
                    TreeNode descrNode = newNode.Nodes.Add(string.Join(" : ", new string[] { "DESCR", (string)descr.Attribute("value") }));

                    bautyp = descr.Element("BAUTYP");
                    if (bautyp != null)
                    {
                        descrNode.Nodes.Add(string.Join(" : ", new string[] { "BAUTYP", (string)bautyp.Attribute("value") }));
                    }
                    file = descr.Element("FILE");
                    if (file != null)
                    {
                        descrNode.Nodes.Add(string.Join(" : ", new string[] { "FILE", (string)file.Attribute("value") }));
                    }
                    List<XElement> technplatz = descr.Elements().Where(x => x.Name.LocalName.StartsWith("TECHNPLATZ")).ToList();
                    foreach (XElement technplat in technplatz)
                    {
                        TreeNode tplnrNode = descrNode.Nodes.Add(technplat.Name.LocalName);
                        XElement tplnr = technplat.Element("TPLNR");
                        if (tplnr != null)
                        {
                            tplnrNode.Nodes.Add(string.Join(" : ", new string[] { "TPLNR", (string)tplnr.Attribute("value") }));
                        }
                        XElement strno = technplat.Element("STRNO");
                        if (strno != null)
                        {
                            tplnrNode.Nodes.Add(string.Join(" : ", new string[] { "STRNO", (string)strno.Attribute("value") }));
                        }
                        XElement pltxt = descr.Element("PLTXT");
                        if (pltxt != null)
                        {
                            tplnrNode.Nodes.Add(string.Join(" : ", new string[] { "PLTXT", (string)pltxt.Attribute("value") }));
                        }
                    }
                }
                bautyp = profil.Element("BAUTYP");
                if (bautyp != null)
                {
                    newNode.Nodes.Add(string.Join(" : ", new string[] { "BAUTYP", (string)bautyp.Attribute("value") }));
                }
                file = profil.Element("FILE");
                if (file != null)
                {
                    newNode.Nodes.Add(string.Join(" : ", new string[] { "FILE", (string)file.Attribute("value") }));
                }


            }
            treeView1.ExpandAll();
        }
    }
}