使用XPath识别XML中的重复节点

时间:2013-05-09 17:18:14

标签: c# xml xpath

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

2 个答案:

答案 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]