4

我正在尝试识别以下 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?)但是,我需要识别具有相同属性而不是相同节点值的组。

4

2 回答 2

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);
于 2013-05-09T17:27:33.420 回答
4

您的问题的解决方案与您链接的答案中的解决方案非常相似,但是您需要解决一个属性而不是子元素,并且想要搜索所有后续和同级节点,而不仅仅是在同级之间。


查找具有您之后再次找到的名称的所有组,但不是之前。

//group[@name = following::group/@name and not(@name = preceding::group/@name)]

如果您想要所有匹配项,请改为在两个方向上搜索:

//group[@name = following::group/@name or @name = preceding::group/@name]
于 2013-05-09T18:10:33.733 回答