/// <summary> /// 获取元素相对于文档根的路径表达 /// </summary> /// <param name="element">要获取路径的元素</param> /// <returns>路径表达式</returns> public static string PathOf(this IHtmlElement element) { if (element == null) { throw new ArgumentNullException("element"); } element.EnsureAllocated(); return(PathOf(element, element.Document)); }
/// <summary> /// 获取元素相对于指定元素的路径表达 /// </summary> /// <param name="element">要获取路径的文档</param> /// <param name="ancestor">计算路径的起始对象</param> /// <returns>路径表达式</returns> public static string PathOf(this IHtmlElement element, IHtmlContainer ancestor) { if (element == null) { throw new ArgumentNullException("element"); } if (ancestor == null) { throw new ArgumentNullException("ancestor"); } element.EnsureAllocated(); StringBuilder builder = new StringBuilder(); while (true) { builder.Insert(0, "/" + element.Name); var container = element.Container; if (container.Equals(ancestor)) { return(builder.ToString()); } element = container as IHtmlElement; if (element == null) { return(null); } } }