写出一个函数来实现去掉任意一个给定的XML文档的重复结点,以给定的”key”重复作为结点重复的标准,如下例:
<Products>
<Product>
<Name>Milk</Name>
<Amount>4</Amount>
</Product>
<Product>
<Name>Milk</Name>
<Amount>0.5</Amount>
</Product>
<Product>
<Name>Coffe</Name>
<Amount>0.5</Amount>
</Product>
</Products>
当以Name字段作为key时,第一个和第二个结点是重复的,当Amount作为key时,则第二个和第三个结点是重复结点。
所以函数应该是这样格式的:
string DeDup(string xml, string keyNode, string rootPath)
参考解决方案:
private static string RemoveDuplicates(string xml, string key, string rootXPath) { XmlDocument doc = new XmlDocument(); List sb = new List(); string keyValue; try { doc.Load(xml); XmlElement root = doc.DocumentElement; XmlNodeList xnodelist = root.SelectNodes(rootXPath); int i=0; foreach (XmlNode item in xnodelist) { Console.WriteLine(i + "bbbbb"); i++; keyValue = item.SelectSingleNode(key).InnerXml; if (sb.Contains(keyValue)) xnode.RemoveChild(item); else sb.Add(keyValue); } return doc.OuterXml; } catch (Exception ex) { // Log exception... throw ex; } } 这个方案只适合于小的xml文档,大的话应考虑应用SAX等解决方案来进行parse.