Xml delete node by elements value

user4074606

Here is xml file:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Data>
  <PageInfo>
   <ID>0</ID>
   <NUM>5</NUM>
   <URL>er.php</URL>
  </PageInfo>
  <PageInfo>
   <ID>1</ID>
   <NUM> 12345</NUM>
   <URL>/out/out.ViewFolder.php</URL>
  </PageInfo>
</Data>

I have tried alot of ways (for a week now) to delete certain node (PageInfo) by element (ID,NUM,URL) in this xml file.

There are few approaches I have tried:

1st approach:

  XmlDocument docc = new XmlDocument();
  docc.LoadXml(AppDomain.CurrentDomain.BaseDirectory + "/WebData.xml");
  XmlNode nodee = docc.SelectSingleNode("/Data/PageInfo/ID[2]");
  nodee.RemoveAll();

2nd approach:

  XmlDocument document = new XmlDocument();
  document.Load(AppDomain.CurrentDomain.BaseDirectory + "/WebData.xml");
  XmlNodeList nodes = document.DocumentElement.SelectNodes("/Data/PageInfo");

  string ID, NUM, URL;

  foreach (XmlNode node in nodes)
  {
       ID = node.SelectSingleNode("ID").InnerText;
       NUM = node.SelectSingleNode("NUM").InnerText;
       URL = node.SelectSingleNode("URL").InnerText;
       node.RemoveAll();
       Console.WriteLine(ID + " " + NUM + " " + URL + "\n");
  }

1st solution does not trigger and exception but nothing happens, 2nd solution throws an exception: Data at the root level is invalid.

How one would be able to delete nodes by elements value in an xml file? (LINQ is fine)

Disclaimer: all solutions I have found on StackOverflow does not work for my certain case.

Moez Rebai

Based on the ID, please try this solution :

First approach

string xml = AppDomain.CurrentDomain.BaseDirectory + "/WebData.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xml);
XmlNode t = xmlDoc.SelectSingleNode("/Data/PageInfo[ID='0']");
t.ParentNode.RemoveChild(t);
xmlDoc.Save(xml);

Second approach : Linq

 XDocument xmlDoc =  XDocument.Load(xml);
            var pageInfo = (from xml2 in xmlDoc.Descendants("PageInfo")
                            where xml2.Element("ID").Value == "0"
                            || xml2.Element("NUM").Value == "5"
                            || xml2.Element("URL").Value == "er.php"
                                select xml2).FirstOrDefault();

            pageInfo.Remove();
            xmlDoc.Save(xml);

// output

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Data>
  <PageInfo>
    <ID>1</ID>
    <NUM> 12345</NUM>
    <URL>/out/out.ViewFolder.php</URL>
  </PageInfo>
</Data>

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How to group XML elements by node value in XSLT?

From Dev

XML Split Node on . value

From Dev

Powershell : sort xml by elements by child node value

From Dev

failed to get values of XML elements in pugixml using node.value()

From Dev

Delete array elements when property is of a given value

From Dev

delete a node from sitemap xml

From Dev

Xml delete node by elements value

From Dev

Delete a node and its elements from an XML file in java

From Dev

accessing xml node value

From Dev

Delete an inner node but not the value in xml with XDocument library in C# .NET

From Dev

How to delete an Xml node in Haxe

From Dev

How to find Node attribute value and delete it in XML with Java DOM parser

From Dev

delete specific xml node Javascript

From Dev

Delete node from xml using xslt based on node value

From Dev

Delete XML node with AS3

From Dev

XML Split Node on . value

From Dev

delete child node with specific value in xml file

From Dev

xml delete elements using xslt

From Dev

delete a node of an xml file with php

From Dev

Delete a node and its elements from an XML file in java

From Dev

Delete node in XML file

From Dev

Delete XML node with SimpleXML, PHP

From Dev

Delete XML child node

From Dev

XML return into separate node elements

From Dev

How to delete a specific XML child node

From Dev

XML Node Value with Attribute

From Dev

How to delete duplicated elements in XML file

From Dev

C# Delete a specific XML node by attribute value, (xyz.parent.child.remove(xyz) is not an option

From Dev

PHP Delete XML Node by Attribute