簡體   English   中英

LINQ to XML修改現有節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM