/// <summary> /// 渲染元素和其子节点 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> private static void RenderElementAndChilds(IHtmlElement element, HtmlRenderContext context) { var writer = context.Writer; var specification = element.Document.HtmlSpecification; if (specification.IsForbiddenEndTag(element.Name)) { var builder = new StringBuilder(); builder.Append(GenerateTagHtml(element, true)); if (element.Nodes().Any()) { throw new FormatException(string.Format(CultureInfo.InvariantCulture, "HTML元素 {0} 不能有任何内容", element.Name)); } writer.Write(builder); } else { writer.Write(GenerateTagHtml(element, false)); RenderChilds(element, context); writer.Write("</{0}>", element.Name); } }
/// <summary> /// 将节点呈现为 HTML /// </summary> /// <param name="node">要呈现的节点</param> /// <param name="context">渲染上下文</param> public static void Render(this IHtmlNode node, HtmlRenderContext context) { if (node == null) { throw new ArgumentNullException("node"); } foreach (var a in context.Adapters) { if (a.Render(node, context)) { return; } } var renderable = node as IHtmlRenderableNode; if (renderable != null) { renderable.Render(context); return; } var element = node as IHtmlElement; if (element != null) { RenderElementAndChilds(element, context); return; } context.Write(node.OuterHtml()); }
/// <summary> /// 渲染所有的子节点 /// </summary> /// <param name="container">要渲染子节点的容器</param> /// <param name="context">渲染上下文</param> public static void RenderChilds(this IHtmlContainer container, HtmlRenderContext context) { foreach (var node in container.Nodes()) { Render(node, context); } }
bool IHtmlRenderAdapter.Render( IHtmlNode node, HtmlRenderContext context ) { var element = node as IHtmlElement; if ( element == null ) return false; if ( !IsEligible( element ) ) return false; Render( element, context ); return true; }
bool IHtmlRenderAdapter.Render(IHtmlNode node, HtmlRenderContext context) { var element = node as IHtmlElement; if (element == null) { return(false); } if (!IsEligible(element)) { return(false); } Render(element, context); return(true); }
bool IHtmlRenderAdapter.Render( IHtmlNode node, HtmlRenderContext context ) { var term = Terms.FirstOrDefault( t => t.TextNode.Equals( node ) ); if ( term != null ) { context.Write( term.TranslatedTerm ); return true; } return false; }
/// <summary> /// 派生类实现此方法提供自定义的渲染规则。 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> protected abstract void Render( IHtmlElement element, HtmlRenderContext context );
/// <summary> /// 派生类实现此方法提供自定义的渲染规则。 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> protected abstract void Render(IHtmlElement element, HtmlRenderContext context);
/// <summary> /// 渲染元素和其子节点 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> private static void RenderElementAndChilds( IHtmlElement element, HtmlRenderContext context ) { var writer = context.Writer; var specification = element.Document.HtmlSpecification; if ( specification.IsForbiddenEndTag( element.Name ) ) { var builder = new StringBuilder(); builder.Append( GenerateTagHtml( element, true ) ); if ( element.Nodes().Any() ) throw new FormatException( string.Format( CultureInfo.InvariantCulture, "HTML元素 {0} 不能有任何内容", element.Name ) ); writer.Write( builder ); } else { writer.Write( GenerateTagHtml( element, false ) ); RenderChilds( element, context ); writer.Write( "</{0}>", element.Name ); } }
/// <summary> /// 渲染所有的子节点 /// </summary> /// <param name="container">要渲染子节点的容器</param> /// <param name="context">渲染上下文</param> public static void RenderChilds( this IHtmlContainer container, HtmlRenderContext context ) { foreach ( var node in container.Nodes() ) { Render( node, context ); } }
/// <summary> /// 将节点呈现为 HTML /// </summary> /// <param name="node">要呈现的节点</param> /// <param name="context">渲染上下文</param> public static void Render( this IHtmlNode node, HtmlRenderContext context ) { if ( node == null ) throw new ArgumentNullException( "node" ); foreach ( var a in context.Adapters ) { if ( a.Render( node, context ) ) return; } var renderable = node as IHtmlRenderableNode; if ( renderable != null ) { renderable.Render( context ); return; } var element = node as IHtmlElement; if ( element != null ) { RenderElementAndChilds( element, context ); return; } context.Write( node.OuterHtml() ); }