我有一个名为“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”显示在文本框中。这完全失败了。 -
答案 0 :(得分:3)
nMaybe这行代码可以帮助您:
TextBox textBox = this.Controls.OfType<TextBox>().FirstOrDefault(tb => tb.Name == "idFromXMl");
在您的情况下,如果您有更多文本框,我会将this.Controls.OfType<TextBox>()
的结果保存在一个集合中,然后继续使用它。
答案 1 :(得分: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;
}
}
测试:
答案 2 :(得分:2)
您可以使用XPath查找节点。
然后找到属性'value'。
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;