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