If you need to remove nodes from an xml document, here is an example.
This sample clean duplicated nodes and only keeps the last one (according to the date field).
Source.xml (the file to filter)
<?xmlversion="1.0"encoding="utf-8" ?>
<Root>
<Products>
<Product>
<Name>Product1</Name>
<DataGroup>
<Data>
<Name>NABC</Name>
<Value>VABC</Value>
<Date>2006-01-10 </Date>
</Data>
<Data>
<Name>NADF</Name>
<Value>VADF</Value>
<Date>2006-01-13</Date>
</Data>
<Data>
<Name>NABC</Name>
<Value>VABC</Value>
<Date>2006-02-09</Date>
</Data>
<Data>
<Name>NABC</Name>
<Value>VABC</Value>
<Date>2006-01-19</Date>
</Data>
<Data>
<Name>NADF</Name>
<Value>VADF</Value>
<Date>2006-03-09</Date>
</Data>
<Data>
<Name>NAON</Name>
<Value>VAON</Value>
<Date>2006-02-22</Date>
</Data>
</DataGroup>
</Product>
<Product>
<Name>Product2</Name>
<DataGroup>
<Data>
<Name>NADF</Name>
<Value>VADF</Value>
<Date>2006-01-13</Date>
</Data>
<Data>
<Name>NABC</Name>
<Value>VABC</Value>
<Date>2006-01-19</Date>
</Data>
<Data>
<Name>NAON</Name>
<Value>VAON</Value>
<Date>2006-03-09</Date>
</Data>
<Data>
<Name>NAON</Name>
<Value>VAON</Value>
<Date>2006-04-21</Date>
</Data>
<Data>
<Name>NABC</Name>
<Value>VABC</Value>
<Date>2006-05-23</Date>
</Data>
</DataGroup>
</Product>
</Products>
</Root>
Destination.xml (the result after filtering)
<?xmlversion="1.0"encoding="utf-8"?>
<Root>
<Products>
<Product>
<Name>Product1</Name>
<DataGroup>
<Data>
<Name>NABC</Name>
<Value>VABC</Value>
<Date>2006-02-09</Date>
</Data>
<Data>
<Name>NADF</Name>
<Value>VADF</Value>
<Date>2006-03-09</Date>
</Data>
<Data>
<Name>NAON</Name>
<Value>VAON</Value>
<Date>2006-02-22</Date>
</Data>
</DataGroup>
</Product>
<Product>
<Name>Product2</Name>
<DataGroup>
<Data>
<Name>NADF</Name>
<Value>VADF</Value>
<Date>2006-01-13</Date>
</Data>
<Data>
<Name>NAON</Name>
<Value>VAON</Value>
<Date>2006-04-21</Date>
</Data>
<Data>
<Name>NABC</Name>
<Value>VABC</Value>
<Date>2006-05-23</Date>
</Data>
</DataGroup>
</Product>
</Products>
</Root>
C# Source with .NET 2.0
XmlDocument xmlSourceDoc = new XmlDocument();
xmlSourceDoc.Load("Source.xml");
XmlNodeList productList = xmlSourceDoc
.SelectNodes(@"//Root/Products/Product" );
SortedDictionary<string, XmlNode> nodesToKeep
= new SortedDictionary<string, XmlNode>();
List<XmlNode> nodesToDelete = new List<XmlNode>();
string dataName;
DateTime dataStoredDate, dataCurrentDate;
XmlNode parentNode;
XmlNodeList dataList;
foreach (XmlNode product in productList)
{
nodesToKeep.Clear();
nodesToDelete.Clear();
dataList = product.SelectNodes(@"DataGroup/Data" );
foreach (XmlNode data in dataList)
{
dataName = data.SelectSingleNode("Name").InnerText;
if (nodesToKeep.ContainsKey(dataName))
{
dataStoredDate = DateTime.Parse(nodesToKeep[dataName]
.SelectSingleNode("Date").InnerText);
dataCurrentDate = DateTime.Parse(data