我寫過從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應用程序? –