我正在尝试在以下XML结构中标识重复的组节点。 我需要找到所有具有相同名称的组,无论它们在树中的哪个位置。
<report>
<group name="a">
<group name="1"></group>
<group name="2"></group>
</group>
<group name="b">
<group name="1"></group>
</group>
</report>
与此帖相似(How do I identify duplicate nodes in XPath 1.0 using an XPathNavigator to evaluate?) 但是,我需要识别具有相同属性而不是相同节点值的组。
答案 0 :(得分:5)
如何使用Linq To xml查找重复项?
var dubs = XDocument.Parse(xml)
.Descendants("group")
.GroupBy(g => (string)g.Attribute("name"))
.Where(g => g.Count() > 1)
.Select(g => g.Key);
答案 1 :(得分:3)
您的问题的解决方案与您链接的答案中的解决方案非常相似,但您需要解决属性而不是子元素,并且希望搜索所有后续节点和兄弟节点,而不仅仅是兄弟节点。
查找具有您之后再次找到的名称的所有组,但不是之前。
//group[@name = following::group/@name and not(@name = preceding::group/@name)]
如果您想要所有出现,请改为双向搜索:
//group[@name = following::group/@name or @name = preceding::group/@name]