[英]LINQ to XML modifying existing nodes
我有一個包含節點的TreeView
,單擊其中的一個后,數據正在從文件加載並填充TextBoxes
等。我想防止創建重復項,因此每次textBox“ title”包含.xml文件中已經存在的條目時,被刪除。 我的問題是,在首先單擊添加條目的按鈕之后,一切正常。 但是,即使我進行了修改,第二次單擊( textBox.Text
值未更改,因此將是重復的)節點也消失了。 在每次雙擊后,將在treeView中添加新的子節點。 我試圖自己做,但是我沒有想法。
按鈕代碼:
private void button1_Click(object sender, EventArgs e)
{
XDocument doc = XDocument.Load("test.xml");
bool ifDuplicate = doc.Descendants("dog")
.Any(x => (string)x.Attribute("name") == textBox1.Text);
if (ifDuplicate == true)
{
var xElement = (from q in doc.Elements("dogs").Elements("dog")
where q.Attribute("name").Value == textBox1.Text
select q);
foreach (var a in xElement)
a.Remove();
doc.Save("test.xml");
return;
}
gender(); //determines in which root node this entry will appear as child node; just comboBox with few exceptions
TreeViewOperations.SaveTree(treeView1, "test2.xml"); //saving treeView1
Save("test.xml"); //saving file that contains data form textBoxes etc.
statusBarUpdate();
}
所以我的問題是:有沒有更好的方法來修改現有節點並刪除重復項? 如果需要,還可以附加Load方法。
編輯:保存方法
private void Save(string filename) { XDocument database = XDocument.Load(filename); XElement dog = new XElement("dog"); database.Element("dogs").Add(dog); dog.Add(new XAttribute("name", textBox1.Text)); dog.Add(new XElement("breed", comboBox3.Text)); dog.Add(new XElement("sex", radioButton3.Checked)); database.Save(filename); }
我認為您的問題來自if (ifDuplicate)
塊的return
,因為它阻止了添加新項的方法。
這是我將使用的解決方案:
private void button1_Click(object sender, EventArgs e)
{
XDocument doc = XDocument.Load("test.xml");
// Removes all existing elements
foreach (XElement xElement in from q in doc.Elements("dogs").Elements("dog")
where q.Attribute("name").Value == textBox1.Text
select q)
xElement.Remove();
gender(); //determines in which root node this entry will appear as child node; just comboBox with few exceptions
TreeViewOperations.SaveTree(treeView1, "test2.xml"); //saving treeView1
Save("test.xml"); //saving file that contains data form textBoxes etc.
statusBarUpdate();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.