C# 使用XPath识别XML中的重复节点
我试图在下面的XML结构中识别重复的组节点。 我需要找到所有具有相同名称的组,无论它们位于树中的何处C# 使用XPath识别XML中的重复节点,c#,xml,xpath,C#,Xml,Xpath,我试图在下面的XML结构中识别重复的组节点。 我需要找到所有具有相同名称的组,无论它们位于树中的何处 <report> <group name="a"> <group name="1"></group> <group name="2"></group> </group> <group name="b"> <group nam
<report>
<group name="a">
<group name="1"></group>
<group name="2"></group>
</group>
<group name="b">
<group name="1"></group>
</group>
</report>
类似于这个帖子()
但是,我需要标识具有相同属性而不是相同节点值的组。使用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);
问题的解决方案与您链接的答案中的解决方案非常相似,但您需要寻址属性而不是子元素,并希望搜索所有后续节点和同级节点,而不仅仅是同级节点
查找具有名称的所有组,您可以在之后(而不是之前)再次找到该名称
//组[@name=following::group/@name而非(@name=previous::group/@name)]
如果需要所有引用,请改为双向搜索:
//组[@name=following::group/@name或@name=previous::group/@name]
这是一个看起来很古怪的XPath:-)难道没有问XPath的具体问题吗?@JensKloster是这样吗?向OP和其他S.O用户展示其他替代品是件坏事吗?OP请求XPath是不是因为他使用的示例使用了XPath。也许他也愿意告诉林肯,我没有否决你的答案。当我看到你的答案时,我想他甚至没有读过这个问题。正确,因为您刚刚发布了一个代码块。这对我不起作用,所以我使用下面的解决方案。谢谢您的帮助。您提供的输入与您使用的完全相同吗?大多数情况下,名称空间会导致这样的查询无法运行,这是一个问题。