通过linq获取XML文档中不在同一级别的两个节点的最近父节点的最佳方法是什么?
找到最近共同祖先的一种简单方法是将第一个元素的所有祖先收集到一个哈希集中,然后找到该集合中第二个元素的第一个祖先:
XElement element1 = ...
XElement element2 = ...
var ancestors = new HashSet<XElement>(element1.Ancestors());
var common = element2.Ancestors().First(a => ancestors.Contains(a));
这种方法对于相对较小的XML数据集上的少量查询是有效的。如果预计最低共同祖先的查询数量很高,则可能需要more advanced algorithm来解决LCO问题。