예제 #1
0
        /// <summary>
        /// 处理结束标签
        /// </summary>
        /// <param name="endTag">结束标签信息</param>
        /// <returns>相关的元素对象,若不支持则返回null</returns>
        protected virtual IHtmlElement ProcessEndTag(HtmlEndTag endTag)
        {
            var tagName = endTag.TagName;


            if (ContainerStack.OfType <IHtmlElement>().Select(e => e.Name).Contains(tagName, StringComparer.OrdinalIgnoreCase))
            {
                IHtmlElement element;

                while (true)
                {
                    element = ContainerStack.Pop() as IHtmlElement;
                    if (element.Name.EqualsIgnoreCase(tagName))
                    {
                        break;
                    }
                }

                return(element);
            }
            else
            {
                ProcessEndTagMissingBeginTag(endTag);

                return(null);
            }

            //无需退出CData标签,读取器会自动退出
        }
예제 #2
0
 /// <summary>
 /// 处理丢失了开始标签的结束标签
 /// </summary>
 /// <param name="endTag">结束标签信息</param>
 protected virtual void ProcessEndTagMissingBeginTag(HtmlEndTag endTag)
 {
     //如果堆栈中没有对应的开始标签,则将这个结束标签解释为文本
     CreateTextNode(endTag.Html);
 }
예제 #3
0
 /// <summary>
 /// 处理丢失了开始标签的结束标签
 /// </summary>
 /// <param name="endTag">结束标签信息</param>
 protected override void ProcessEndTagMissingBeginTag(HtmlEndTag endTag)
 {
     //忽略多出的结束标签
 }