我有一个这样的 XML 文档
<root>
<item id="1" creator="me">
<childA>1</childA>
<childB>2</childB>
</item>
<item id="2" creator="me">
<childA>1</childA>
<childB>3</childB>
<childB>4</childB>
</item>
</root>
我正在尝试查找重复项,然后再次使用这样的逻辑为重复项重复子项
XDocument XmlRoot //whatever...you get the point
// Get item nodes
var items = XmlRoot.Descendants("item");
// Find duplicate items keys using creator attribute
var duplicateItemKeys = items.GroupBy(x => x.Attribute("creator").Value)
.Where(g => g.Count() > 1)
.Select(g => g.Key);
foreach(var duplicateItemKey in duplicateItemKeys)
{
// Get the duplicate item XML elements using the duplicate keys
var duplicateItems = items.Where(x => x.Attribute("creator").Value == duplicateToucheKey)
.OrderBy(xelement => xelement.Attribute("CreatedOn").Value);
}
这可行,但是稍后当我尝试使用重复项时出现问题。任何时候它枚举(如在 foreach duplicateItems 中)第一个项目都会失去其子项的上下文。第二个刚刚好。
因此,例如,稍后在代码中我说
var allItemB = new List<XElement>();
foreach (duplicateItem in duplicateItems)
{
allItemB.AddRange(duplicateItem.Descendants("childB"));
}
我希望“allItemB”在第一遍包含 2,然后在第二遍包含 234。最终发生的是它只包含 34,因为一旦枚举了 duplicateItems 数组,第一个 XElement 就会失去它的孩子。
有谁知道如何解决这一问题?