Home > Net >  How to remove xmlns part from a Xml string?
How to remove xmlns part from a Xml string?

Time:12-12

I want to remove xmlns part from the xml string and convert that to a json.

            string test = "<Behavior xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.adlibsoftware.com\">\r\n  <JobFolders>\r\n    <Error>${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}</Error>\r\n    <Work>${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}</Work>\r\n    <Input>\r\n      <DeleteEmptySubfolders>true</DeleteEmptySubfolders>\r\n    </Input>\r\n  </JobFolders>\r\n  <JobFiles>\r\n    <ProcessingLocation>\r\n      <Server>\r\n        <TransferSegmentSize unit=\"Kilobytes\">4096</TransferSegmentSize>\r\n      </Server>\r\n    </ProcessingLocation>\r\n    <Input>\r\n      <Naming>Resh</Naming>\r\n    </Input>\r\n  </JobFiles>\r\n</Behavior>";

I tried using the below code but still not able to remove it. Any help would be great!

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(test);

            foreach (var node in doc)
            {
                var el = node as XmlElement;
                if (el != null)
                {
                    if (el.HasAttribute("xmlns"))
                    {
                        var ns = el.GetAttribute("xmlns");
                        if (ns != null && ns == el.NamespaceURI)
                        {
                            el.RemoveAttribute("xmlns");
                        }
                    }
                }
            }

            string jsonText = JsonConvert.SerializeXmlNode(doc);

The output that I expect is:

  {"Behavior":"JobFolders":{"Error":"${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}","Work":"${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}","Input":{"DeleteEmptySubfolders":"true"}},"JobFiles":{"ProcessingLocation":{"Server":{"TransferSegmentSize":{"@unit":"Kilobytes","#text":"4096"}}},"Input":{"Naming":"Resh"}}}}

The output I receive from above code:

 {"Behavior":{"@xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","JobFolders":{"Error":"${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}","Work":"${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}","Input":{"DeleteEmptySubfolders":"true"}},"JobFiles":{"ProcessingLocation":{"Server":{"TransferSegmentSize":{"@unit":"Kilobytes","#text":"4096"}}},"Input":{"Naming":"Resh"}}}}

CodePudding user response:

Problem got solved. I have added the edited solution here. Thanks for your time!

  string test = "<Behavior xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.adlibsoftware.com\">\r\n  <JobFolders>\r\n    <Error>${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}</Error>\r\n    <Work>${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}</Work>\r\n    <Input>\r\n      <DeleteEmptySubfolders>true</DeleteEmptySubfolders>\r\n    </Input>\r\n  </JobFolders>\r\n  <JobFiles>\r\n    <ProcessingLocation>\r\n      <Server>\r\n        <TransferSegmentSize unit=\"Kilobytes\">4096</TransferSegmentSize>\r\n      </Server>\r\n    </ProcessingLocation>\r\n    <Input>\r\n      <Naming>Resh</Naming>\r\n    </Input>\r\n  </JobFiles>\r\n</Behavior>";

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(test);

            foreach (var node in doc)
            {
                var el = node as XmlElement;
                if (el != null)
                {
                    if (el.HasAttribute("xmlns") || el.HasAttribute("xmlns:xsi"))
                    {
                        var ns = el.GetAttribute("xmlns");
                        var ns1 = el.GetAttribute("xmlns:xsi");
                        if (ns != null && ns == el.NamespaceURI && ns1 != null && ns1!= el.NamespaceURI)
                        {
                            el.RemoveAttribute("xmlns");
                            el.RemoveAttribute("xmlns:xsi");
                        }
                    }
                }
            }

            string jsonText = JsonConvert.SerializeXmlNode(doc);

CodePudding user response:

The code in the question only removes 1 attribute per node.

This code is actually removing the attributes:

            string test = "<Behavior xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.adlibsoftware.com\">\r\n  <JobFolders>\r\n    <Error>${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}</Error>\r\n    <Work>${machine:description=RM1029-DEV:id=4FC4AF7C-AF61-45F9-BE86-49812C619F06}</Work>\r\n    <Input>\r\n      <DeleteEmptySubfolders>true</DeleteEmptySubfolders>\r\n    </Input>\r\n  </JobFolders>\r\n  <JobFiles>\r\n    <ProcessingLocation>\r\n      <Server>\r\n        <TransferSegmentSize unit=\"Kilobytes\">4096</TransferSegmentSize>\r\n      </Server>\r\n    </ProcessingLocation>\r\n    <Input>\r\n      <Naming>Resh</Naming>\r\n    </Input>\r\n  </JobFiles>\r\n</Behavior>";

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(test);

            foreach (var node in doc)
            {
                var el = node as XmlElement;
                if (el != null)
                {
                    while (el.HasAttributes)
                    {
                        XmlAttribute item = el.Attributes[0];
                        if (el.HasAttribute(item.Name) && item.Name.Contains("xmlns"))
                        {
                            var ns = el.GetAttribute(item.Name);
                            if (ns != null )
                            {
                                el.RemoveAttribute(item.Name);
                                Console.WriteLine($"Remove attriute: {item.Name}"); 
                            }
                        }
                    }
                }
            }

            string jsonText = JsonConvert.SerializeXmlNode(doc);
            Console.WriteLine(jsonText);
            Console.ReadLine();
  • Related