1

我有一个名为“numbers.xml”的 xml 文件,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<program>
<box id="aaa" value="78678"/>
<box id="bbb" value="37287"/>
<box id="ccc" value="783"/>
<box id="ddd" value="7867"/>
<box id="eee" value="786"/>
<box id="fff" value="23"/>
<box id="ggg" value="453"/>
<box id="hhh" value="4537"/>
</program>

我想阅读这个 xml 文件并填充文本框。但在Windows 窗体中,应用程序 txtAAA.text值必须采用 id="aaa" 值,即 78678。同样,txtBBB.text值必须采用 id="bbb" 值,即 37287。我该怎么做?

编辑:

我试过这样:

 XmlDocument xmldoc = new XmlDocument();
 xmldoc.Load(openfiledialog1.FileName); 
 XmlNodeList nodelist = xmldoc.DocumentElement.ChildNodes;
 XmlNode xmlnode = nodelist.Item(0); 
 txtAAA.Text = xmlnode.Attributes["id"].InnerText; 

但是“aaa”显示在文本框中。这是完全失败的。——</p>

4

3 回答 3

3

n也许这行代码会帮助你:

TextBox textBox = this.Controls.OfType<TextBox>().FirstOrDefault(tb => tb.Name == "idFromXMl");

在你的情况下,如果你有更多的文本框,我会将结果保存this.Controls.OfType<TextBox>()在一个集合中并使用它进行工作。

于 2013-08-18T22:08:33.553 回答
2

您可以创建 xml 项目的列表,并在 foreach 循环中根据 TextBox 名称分配

假设 TextBox 名称是:

txtAAA
txtBBB
txtCCC
...etc

您可以删除txt部分以找到正确的值 id

var data = XElement.Load("C:\\Test.xml").Descendants("box");

foreach (var textbox in Controls.OfType<TextBox>())
{
    var value = data.FirstOrDefault(v => v.Attribute("id").Value == textbox.Name.Replace("txt","").ToLower());
    if (value != null)
    {
        textbox.Text = value.Attribute("value").Value;
    }
}

测试:

在此处输入图像描述

于 2013-08-18T22:22:35.263 回答
2

您可以使用 XPath 来查找节点。

然后找到属性“值”。

        XmlDocument xmldoc = new XmlDocument();
        xmldoc.Load( openfiledialog1.FileName );
        XmlNode nodeAAA = xmldoc.SelectSingleNode( "/program/box[@id='aaa']" ); //XPath Query here.
        txtAAA.Text = nodeAAA.Attributes["value"].InnerText;

XPath 教程 - http://www.w3schools.com/xpath/xpath_syntax.asp

于 2013-08-18T23:00:59.170 回答