如何从XML文件中删除条目?

时间:2013-12-11 19:02:25

标签: c# xml listbox

我在listBox(lstAnimals)中填充了xml信息。我可以使用以下代码从listBox中删除:

 private void btnAdopt_Click(object sender, EventArgs e)
    {
        DialogResult result = MessageBox.Show("Complete Adoption?", "Found a Happy Home!", MessageBoxButtons.YesNo);
        if (result == DialogResult.Yes)
        {

            if (lstAnimals.SelectedIndex >= 0)
                lstAnimals.Items.Remove(lstAnimals.SelectedItem);                                                        

        }
        else
        {
            return;
        }

但是,当列表更新/程序打开时,该条目将重新填充到listBox中。如何使用lixtBox同时从XML文档中删除它?

这是xml:

<?xml version="1.0" encoding="UTF-8"?>
 <Animals>
  <Animal>
   <Name>Bruce</Name>
   <Type>Dog</Type>
   <Age>Adult</Age>
  </Animal>
  <Animal>
   <Name>Gizmo</Name>
   <Type>Cat</Type>
   <Age>Senior</Age>
  </Animal>
 </Animals>

我被问到如何填充我的listBox,所以这里是代码:

private void UpdateList() 
    {         
        var an = XElement.Load(@"Animals.xml")
            .Descendants("Animal")
            .OrderBy(xe => (xe.Element("Name").Value))
            .ToList<XElement>();

        lstAnimals.Items.Clear();

        foreach (var a in an)
            lstAnimals.Items.Add(new Animal()
            {
                name = a.Element("Name").Value.ToString(),
                type = a.Element("Type").Value,
                age = a.Element("Age").Value
            });
    }

listBox呈现的图片: http://img.photobucket.com/albums/v84/Shades9323/shelterapp_zps4c22868c.jpg

3 个答案:

答案 0 :(得分:0)

您可以使用与此

类似的 XmlDocument removeChild 方法
XmlDocument doc ;

doc = new XmlDocument(); 
doc.Load("path to your XML file");

XmlNode animalNode;
XmlNode root = doc.DocumentElement;

animalNode=root.SelectSingleNode("descendant::Animal[Name='" + lstAnimals.SelectedItem + "']");
doc.RemoveChild(animalNode) ;

//save the XML file

答案 1 :(得分:0)

将此代码添加到按钮点击事件

        string text = lstAnimals.SelectedItem.ToString();
        string animalName = text.Substring(0, text.IndexOf("is")).Trim();           
        XDocument xDoc = XDocument.Load("Animals.xml"); //here is your filepath
        XElement element = (from x in xDoc.Descendants("Animal")
            where x.Element("Name").Value == animalName  
            select x).First();
        element.Remove();
        xDoc.Save("Animals.xml");
        lstAnimals.Items.Remove(lstAnimals.SelectedItem);

当然,如果你向你的动物添加Id属性,它会更容易。只需将id变量存储到listBox项目“Tag”属性中..

答案 2 :(得分:0)

在这里你可以使用linq to xml

来做到这一点
     private void btnAdopt_Click(object sender, EventArgs e)
    {
        DialogResult result = MessageBox.Show("Complete Adoption?", "Found a Happy Home!", MessageBoxButtons.YesNo);
        if (result == DialogResult.Yes)
        {

            if (lstAnimals.SelectedIndex >= 0)
{
                lstAnimals.Items.Remove(lstAnimals.SelectedItem);  
XDocument xDoc = XDocument.Load("test.xml");
            xDoc.Descendants("Animal").Where(x => x.Element("Name").Value.ToString() == lstAnimals.SelectedItem ).Remove();
            xDoc.Save("test1.xml"); 

}                                                      

        }
        else
        {
            return;
        }