使用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来评估重复节点?)但是,我需要标识具有相同属性的组,而不是具有相同节点值的组。
如何使用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]