Search code examples
c#xmlvisual-web-developer

Delete Part Of XML in C#


I have a XML file in my Visual Web Developer project that looks like this:

<?xml version="1.0" encoding="utf-8"?>
<complaints>
    <complaint>
        <user>omern</user>
        <content>asd</content>
        <ID>1</ID>
    </complaint>
    <complaint>
        <user>omeromern</user>
        <content>try2</content>
        <ID>2</ID>
    </complaint>
</complaints>    

I want to delete complaint nodes that have and ID of 2. How can I do this?


Solution

  • You can use the System.Xml.XmlDocument class to modify XML documents in C#. Note that this class lives in the System.Xml.dll assembly, so you will need to add a reference to System.Xml in your project.

    using System.Xml;
    internal class XmlExample
    {
        /// <summary>
        /// Takes an XML string and removes complaint nodes with an ID of 2.
        /// </summary>
        /// <param name="xml">An XML document in string form.</param>
        /// <returns>The XML document with nodes removed.</returns>
        public static string StripComplaints(string xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(xml);
            XmlNodeList nodes = xdoc.SelectNodes("/complaints/complaint[ID = '2']");
            XmlNode complaintsNode = xdoc.SelectSingleNode("/complaints");
            foreach (XmlNode n in nodes)
            {
                complaintsNode.RemoveChild(n);
            }
    
            return xdoc.OuterXml;
        }
    }
    

    Usage:

    string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
                    <complaints>
                        <complaint>
                            <user>omern</user>
                            <content>asd</content>
                            <ID>1</ID>
                        </complaint>
                        <complaint>
                            <user>omeromern</user>
                            <content>try2</content>
                            <ID>2</ID>
                        </complaint>
                    </complaints>";
    xml = XmlExample.StripComplaints(xml);