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

本文关键字:节点 XPath 识别 XML 使用 | 更新日期: 2023-09-27 18:12:48

我正在尝试识别以下XML结构中的重复组节点。我需要找到所有具有相同名称的组,无论它们在树的哪个位置。

<report>
    <group name="a">
        <group name="1"></group>
        <group name="2"></group>
    </group>
    <group name="b">
        <group name="1"></group>
    </group>
</report>

类似于这篇文章(我如何在XPath 1.0中使用XPathNavigator来评估重复节点?)但是,我需要标识具有相同属性的组,而不是具有相同节点值的组。

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

如何使用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);

您的问题的解决方案与您链接的答案中的解决方案非常相似,但是您需要处理一个属性而不是子元素,并且希望搜索所有后续节点和兄弟节点,而不仅仅是兄弟节点。


查找所有具有名称的组,这些组在之后而不是之前再次找到。

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

如果你想要所有的出现,在两个方向上搜索:

//group[@name = following::group/@name or @name = preceding::group/@name]