remoção eficiente de elementos xml duplicados em c #
Eu tenho alguns arquivos XML que contêm muitas entradas duplicadas, como essas.
<annotations>
<annotation value=",Clear,Outdoors" eventID="2">
<image location="Location 1" />
<image location="Location 2" />
<image location="Location 2" />
</annotation>
<annotation value=",Not a problem,Gravel,Shopping" eventID="2">
<image location="Location 3" />
<image location="Location 4" />
<image location="Location 5" />
<image location="Location 5" />
<image location="Locat,ion 5" />
</annotation>
</annotations>
Eu quero remover os elementos duplicados em cada um dos filhos. A maneira como abordamos isso é copiando todos os elementos para uma lista e comparando-os,
foreach (var el in xdoc.Descendants("annotation").ToList())
{
foreach (var x in el.Elements("image").Attributes("location").ToList())
{
//add elements to a list
}
}
No meio do caminho, percebi que isso é muito ineficiente e demorado. Eu sou bastante novo em XML, queria saber se existem métodos internos em C # que eu possa usar para remover duplicatas ?.
Eu tentei usar
if(!x.value.Distinct()) // can't convert collections to bool
x.Remove();
Mas isso não funciona, nem
if(x.value.count() > 1) // value.count returns the number of elements.
x.Remove()