/* * /// <summary> * /// 使用指定文本替换元素内容(警告,此方法会清除元素所有内容) * /// </summary> * /// <param name="element">要替换内容的元素</param> * /// <param name="text">文本内容</param> * public static void ReplaceChildsWithText( this IHtmlElement element, string text ) * { * if ( element == null ) * throw new ArgumentNullException( "element" ); * * var factory = element.Document.GetNodeFactory(); * if ( factory == null ) * throw new NotSupportedException(); * * lock ( element.SyncRoot ) * { * ClearNodes( element ); * * if ( !HtmlSpecification.cdataTags.Contains( element.Name, StringComparer.OrdinalIgnoreCase ) ) * { * var fragment = HtmlEncode( text, factory ); * * fragment.InsertTo( element, 0 ); * } * else * { * var textNode = factory.CreateTextNode( text ); * textNode.Into( element, 0 ); * } * } * * } * * /// <summary> * /// 使用指定的HTML文本替换元素内容(警告,此方法会清除元素所有内容) * /// </summary> * /// <param name="element">要替换内容的元素</param> * /// <param name="html">要替换的HTML代码</param> * public static void ReplaceChildsWithHtml( this IHtmlElement element, string html ) * { * if ( element == null ) * throw new ArgumentNullException( "element" ); * * var factory = element.Document.GetNodeFactory(); * if ( factory == null ) * throw new NotSupportedException(); * * lock ( element.SyncRoot ) * { * ClearNodes( element ); * * if ( HtmlSpecification.cdataTags.Contains( element.Name, StringComparer.OrdinalIgnoreCase ) ) * { * var textNode = factory.CreateTextNode( html ); * textNode.Into( element, 0 ); * } * else * { * var fragment = factory.ParseFragment( html ); * fragment.InsertTo( element, 0 ); * } * } * } */ private static HtmlFragment HtmlEncode(string text, IHtmlNodeFactory factory) { if (text == null) { throw new ArgumentNullException("text"); } if (factory == null) { throw new ArgumentNullException("factory"); } var fragment = new HtmlFragment(factory); var encoded = HtmlEncoding.HtmlEncode(text); encoded = encoded.Replace("\r\n", "\n").Replace("\r", "\n"); int index = 0, brIndex = 0; while (true) { brIndex = encoded.IndexOf('\n', index); if (brIndex == -1) { if (index < encoded.Length) { fragment.AddNode(factory.CreateTextNode(encoded.Substring(index))); } break; } if (index != brIndex) { fragment.AddNode(factory.CreateTextNode(encoded.Substring(index, brIndex - index))); } fragment.AddNode(factory.CreateElement("br")); index = brIndex + 1; } return(fragment); }
/// <summary> /// 创建文本节点的副本 /// </summary> /// <param name="factory">用于创建文本节点的构建器</param> /// <param name="textNode">需要被创建副本的文本节点</param> /// <returns>文本节点的未分配副本</returns> public static IFreeTextNode MakeCopy(this IHtmlNodeFactory factory, IHtmlTextNode textNode) { return(factory.CreateTextNode(textNode.HtmlText)); }