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();