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