Я использую Linq, чтобы попытаться отфильтровать дубликаты XElements, имеющие одинаковое значение для атрибута "name".
Оригинал xml:
<foo>
<property name="John" value="Doe" id="1" />
<property name="Paul" value="Lee" id="1" />
<property name="Ken" value="Flow" id="1" />
<property name="Jane" value="Horace" id="1" />
<property name="Paul" value="Lee" id="1" />
... other xml properties with different id's
</foo>
// project elements in group into a new XElement
// (this is for another part of the code)
var props = group.data.Select( f => new XElement("property",
new XAttribute("name", f.Attribute("name").Value), f.Attribute("value"));
// filter out duplicates
props = props.Where(f => f.ElementsBeforeSelf()
.Where(g => g.Attribute("name").Value ==
f.Attribute("name").Value)
.Count() == 0);
К сожалению, шаг фильтра не работает. Я бы подумал, что фильтр Where () проверит любой элемент перед текущим, имеющий то же имя свойства, и затем включит его в набор, который был больше нуля, тем самым исключая текущий элемент (называемый 'f'), но это не происходит. Мысли?