将XML属性加载到c#winform

本文关键字:c#winform 加载 属性 XML | 更新日期: 2023-09-27 18:20:07

我有一个xml文件,它的结构如下:

<MACHINE>
 <CONTROL NAME="" LABEL="TEST1" LABEL1="TEST1"/>
 <CONTROL NAME="" LABEL="TEST2" LABEL1="TEST2"/>
 <CONTROL NAME="" LABEL="TEST3" LABEL1="TEST3"/>
</MACHINE>

我需要解析它,然后我需要保存数据并在表单中创建多个文本框。

我需要使用LABEL作为标签,LABEL1作为文本框的名称

我试着这样解析:

XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"C:projects.xml");
XmlNodeList list = xdoc.SelectNodes("//MACHINE");

但我不知道如何走得更远。

我添加了这个代码来生成一些文本框

var n = 5;
for (int i = 0; i < n; i++)
{
    for (int i = 0; i < n; i++)
        {
            //Create label
            Label label = new Label();
            label.Text = String.Format("Label {0}", i);
            //Position label on screen
            label.Left = 10;
            label.Top = (i + 1) * 20;
            //Create textbox
            TextBox textBox = new TextBox();
            //Position textbox on screen
            textBox.Left = 120;
            textBox.Top = (i + 1) * 20;
            //Add controls to form
            label.Name = list[i].Attributes["LABEL"].Value;
            textBox.Name = list[i].Attributes["LABEL1"].Value;
            this.Controls.Add(label);
            this.Controls.Add(textBox);
}

我如何修改它,使它从XML文件中获得尽可能多的值,而不仅仅是5?

将XML属性加载到c#winform

您的xml应该有适当的闭包元素,如。

<CONTROL NAME="" LABEL="TEST1" LABEL1="TEST1"></CONTROL>

<CONTROL NAME="" LABEL="TEST1" LABEL1="TEST1" />

您可以只选择CONTROL而不是MACHINE。使用Count属性可以得到CONTROL的计数。

更改

XmlNodeList list = xdoc.SelectNodes("//MACHINE");

进入

XmlNodeList list = xdoc.SelectNodes("//CONTROL");

然后设置

var n = list.Count;

在的内部设置标签和文本框名称。

label.Name = list[i].Attributes["LABEL"].Value;
textBox.Name = list[i].Attributes["LABEL1"].Value;

我建议您试用LINQ to XML:

var root = XElement.Load(@"c:'projects.xml");
var controlElements = root.Descendants("CONTROL");
int labelCounter = 1;
foreach (var element in controlElements)
{
    var labelId = (string) element.Attribute("LABEL");
    var textBoxName = (string) element.Attribute("LABEL1");
    Label label = new Label();
    label.Text = string.Format("Label {0}", labelCounter);
    label.Left = 10;
    label.Top = (labelCounter + 1) * 20;
    TextBox textBox = new TextBox();
    textBox.Left = 120;
    textBox.Top = (labelCounter + 1) * 20;
    this.Controls.Add(label);
    this.Controls.Add(textBox);
    labelCounter++;
}