什么';是查找和删除XML中重复节点的最快方法

本文关键字:节点 方法 XML 查找 删除 什么 | 更新日期: 2023-09-27 18:24:02

XML文件的结构类似于以下

<Nodes>
   <Node> one </Node>
   <Node> two </Node>
   <Node> three </Node>
   <Node> three </Node>
</Nodes>

由于xml文件有30000多个节点,我正在寻找查找和删除重复节点的最快方法。

你会怎么做?

什么';是查找和删除XML中重复节点的最快方法

您可以使用HashSet:

var values = new HashSet<string>();
var xmlDocument = XDocument.Load("path");
foreach(var node in xmlDocument.Root.Elements("Node").ToList())
{
   if(!values.Add((string)node)) 
       node.Remove();
}
xmlDocument.Save("newpath");

另一种方法是为XElement类实现IEqualityComparer,然后使用Distinct方法。

尝试XSLT2.0转换:

<Nodes xmlns:xsl="http://www.w3..org/1999/XSL/Transform" xsl:version="2.0">
 <xsl:for-each-group select="/Nodes/Node" group-by=".">
  <xsl:copy-of select="current-group()[1]"/>
 </xsl:for-each-group>
</Nodes>

您可以使用Saxon或XmlPrime从C#运行它。