delete element from xml using LINQ

16,128

EDIT: Okay, with further editing, it's clearer what you want to do, and as it happens it's significantly easier than you're making it, thanks to the Remove extension method on IEnumerable<T> where T : XNode:

string target = txt.Text.Trim();
doc.Descendants("start")
   .Elements("site")
   .Where(x => x.Value == target)
   .Remove();

That's all you need.

Share:
16,128
Mushfiq
Author by

Mushfiq

A Computer Science graduate based in Dhaka, Bangladesh, working on Web Applications and Software Development for more than nine years. I love technology, music, movies, and photography, among many other things. I have implemented complex user stories that make businesses count on more conversion and grow with it. I started my career with ASP.NET but eventually revamped my skills with JavaScript, ReactJs, NodeJs, and Ruby on Rails. Throughout my career, I have contributed to the businesses that positively impact society through my active and innovative contributions to the organization’s growth. While being an independently motivated engineer, I appreciate the collective efforts and collaborative productivity within the team environment. I am open-minded and focused on learning new technologies that directly impact the betterment of human lives. You can download my resume or view it online.

Updated on June 09, 2022

Comments

  • Mushfiq
    Mushfiq over 1 year

    I've a xml file like:

    <starting>
       <start>
          <site>mushfiq.com</site>
          <site>mee.con</site>
          <site>ttttt.co</site>
          <site>jkjhkhjkh</site>
          <site>jhkhjkjhkhjkhjkjhkh</site>
         <site>dasdasdasdasdasdas</site>
     </start>
    </starting>
    

    Now I need to delete any <site>...</site> and value will randomly be given from a textbox.

    Here is my code :

    XDocument doc = XDocument.Load(@"AddedSites.xml");                
    var deleteQuery = from r in doc.Descendants("start") where r.Element("site").Value == txt.Text.Trim() select r;
    foreach (var qry in deleteQuery)
    {
        qry.Element("site").Remove();
    }
    doc.Save(@"AddedSites.xml");
    

    If I put the value of first element in the textbox then it can delete it, but if I put any value of element except the first element's value it could not able to delete! I need I'll put any value of any element...as it can be 2nd element or 3rd or 4th and so on.... can anyone help me out?