我有这个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文件中的maby值相比而不仅仅是5?
答案 0 :(得分:1)
你的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;
在for内设置标签和文本框名称。
label.Name = list[i].Attributes["LABEL"].Value;
textBox.Name = list[i].Attributes["LABEL1"].Value;
答案 1 :(得分:0)
我建议你试试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++;
}