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