我写过从xml文件加载值到textBoxes
的方法。LINQ to XML handling duplicates
private void load(TreeNodeMouseClickEventArgs e)
{
XDocument doc = XDocument.Load(@"test.xml");
string nodeName = e.Node.Text;
var data = from q in doc.Descendants("dog")
where (string)q.Attribute("name") == nodeName
select new Data
{
name = q.Attribute("name").Value,
breed = q.Element("breed").Value,
sex = q.Element("sex").Value
};
foreach (var element in data)
{
textBox1.Text = element.name;
textBox2.Text = element.breed;
comboBox1.Text = element.sex;
}
}
它工作正常,只要我不会用相同的name
但不同breed
添加其他的狗。我的XML文件是这样的:
<dogs>
<dog name="Mike">
<breed>dachshund</breed>
<sex>true</sex>
</dog>
<dog name="Mike">
<breed>husky</breed>
<sex>true</sex>
</dog>
</dogs>
当我从第二个节点试图负载值,什么都不会发生,因为命名Mike
项目被发现较早。尝试使用列表,但它没有工作(或者只是我做错了什么)。我想允许这种“重复”,只有1:1重复是forriben(已经写了这部分,它的工作原理)。如果以相似的方式获得breed
,我获得name
,它将解决问题 - 只需在查询中添加另一个where
即可。
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
nodeName = e.Node.Text;
}
这是我应得name
- 通过单击所需的节点treeView
。如果名称相同的多个条目相同,则只加载最新的条目。所以我的问题是:如何处理?很明显,可以有一只名叫汤姆的狗,养殖达克沙德狗和名叫汤姆的狗,面包沙哑。
当你在一个循环中给文本框赋值时,你只会分配最后一个值。你试图达到什么目的? –
是的,你说得对,那是我的问题。我想能够加载特定的节点,但现在如果有两个节点具有相同的'name',则无论如何加载最后一个节点。作为@ Jean-Bernard Pellerin,我可以使用另一个属性,标记。 – PotatoBox
它是winforms还是web应用程序? –