Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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);
                }
            }
        }