我是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. 有时会有孩子。
我的想法是创建一个像这样的可折叠菜单。
如何阅读此XML文件以使用此信息创建这样的菜单?
答案 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();
}
}
}