首页 > 解决方案 > XDocument如何获取不在同一级别的两个节点的父级

问题描述

通过 linq 获取 XML 文档中不在同一级别的两个节点的最近父节点的最佳方法是什么?

标签: c#xmllinqlinq-to-xml

解决方案


找到最近的共同祖先的一种简单方法是将第一个元素的所有祖先收集到一个哈希集中,然后找到该集合中第二个元素的第一个祖先:

XElement element1 = ...
XElement element2 = ...
var ancestors = new HashSet<XElement>(element1.Ancestors());
var common = element2.Ancestors().First(a => ancestors.Contains(a));

这种方法对于在相对较小的 XML 数据集上进行少量查询是有效的。如果预计最低共同祖先的查询数量会很高,您可能需要更高级的算法来解决 LCO 问题。


推荐阅读