Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XPath识别XML中的重复节点_C#_Xml_Xpath - Fatal编程技术网

C# 使用XPath识别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

我试图在下面的XML结构中识别重复的组节点。 我需要找到所有具有相同名称的组,无论它们位于树中的何处

<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。也许他也愿意告诉林肯,我没有否决你的答案。当我看到你的答案时,我想他甚至没有读过这个问题。正确,因为您刚刚发布了一个代码块。这对我不起作用,所以我使用下面的解决方案。谢谢您的帮助。您提供的输入与您使用的完全相同吗?大多数情况下,名称空间会导致这样的查询无法运行,这是一个问题。