XML文件具有这样的结构
<Nodes>
<Node> one </Node>
<Node> two </Node>
<Node> three </Node>
<Node> three </Node>
</Nodes>
由于xml文件有超过30000个节点,我正在寻找查找和删除重复节点的最快方法。
你会怎么做?
答案 0 :(得分:7)
您可以使用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");
另一种方法是为IEqualityComparer
类实现XElement
,然后使用Distinct
方法。
答案 1 :(得分:1)
尝试XSLT 2.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#运行它。