/// <summary> /// 속성값을 설정함. /// </summary> /// <param name="Html">HTML 문자열</param> /// <param name="AttrName">속성 이름</param> /// <param name="AttrValue">속성 값</param> /// <returns>속성값이 설정된 HTML 문자열</returns> public static string SetAttribute(string Html, string AttrName, string AttrValue) { string Xml = CHtml.ConvertHtmlToParsableXml(Html, true); XmlDocument XDoc = new XmlDocument(); XDoc.LoadXml(Xml); XDoc.DocumentElement.SetAttribute(AttrName, AttrValue); return(XDoc.DocumentElement.OuterXml); }
/// <summary> /// !!! <![CDATA[<p>제목</p> -> <p/>제목</p>로 변환되므로 완벽하지 않음.]]> /// HTML을 XML 형식으로 변경하기 위해 닫는 태그가 없는 HTML 태그인 <![CDATA[<p>]]> 태그 등을 <![CDATA[<p/>]]> 태그와 같이 변경함. /// </summary> /// <param name="Html">HTML 문자열</param> /// <param name="IsAddProcessingInstruction">"<![CDATA[<?xml version="1.0" encoding="UTF-8"?>]]>" 문자열을 추가할 지 여부</param> /// <returns>XML 형식으로 변환된 문자열</returns> /// <example> /// <code> /// </code> /// </example> public static string ConvertHtmlToParsableXml(string Html, bool IsAddProcessingInstruction) { Html = CHtml.ReplaceLtGtAmpersand(Html); string[] aTag = new string[] { "<img", "<p", "<br", "<hr", "<input" }; //에러 나지 않게 3 Space를 넣음. for (int i = 0, i2 = Html.Length; i < i2; i++) { for (int j = 0, j2 = aTag.Length; j < j2; j++) { string TagCur = aTag[j]; string s = Html.Substring(i, Math.Min(i2 - i, TagCur.Length)); if (string.Compare(s, TagCur, true) == 0) { int Pos = Html.IndexOf(">", i + TagCur.Length); if (Pos != -1) { if (Html.Substring(Pos - 1, 1) != "/") { Html = Html.Substring(0, Pos) + "/" + Html.Substring(Pos); //이미 시작 태그에 해당하는 마지막 태그를 고쳤으므로 //마지막 태그 다음으로 검사 위치를 옮김. i = Pos + 2; //"/"를 넣어 총길이가 하나 늘었으므로 i2를 하나 늘림. i2++; } } } } } if (IsAddProcessingInstruction) { Html = CConst.XmlHeaderUtf8 + "\r\n" + Html; } return(Html); }
/// <summary> /// WebBrowser 컨트롤에 HTML 내용을 표시함 /// </summary> /// <remarks> /// 폼의 Load 이벤트에서 다음 코드를 미리 실행해야만 이 함수를 호출할 때 에러가 발생하지 않음. /// webContent.Navigate("about:blank"); /// </remarks> /// <param name="web">WebBrowser 컨트롤</param> /// <param name="Html">표시할 HTML</param> /// <param name="IsAllowHtmlTag">HTML 태그가 적용되게 할 것인지, <![CDATA[<, >]]> 등의 문자열 자체가 그대로 보이게 할 것인 지 여부.</param> /// <param name="Style">표시할 HTML에 적용될 스타일</param> /// <example> /// 다음은 radHtml, radText Radio 컨트롤, txtContent TextBox 컨트롤, webContent WebBrowser 컨트롤이 있는 경우, /// radHtml, radText를 선택하거나, txtContent에 새로운 내용을 입력할 때마다 webContent에 HTML 결과를 표시하는 예입니다. /// <code> /// private void frmBoardManage_Load(object sender, EventArgs e) /// { /// CCommon.ContentStyle = "font-family: 돋움,돋움체,Gulim,Arial; font-size: 12px; color:#000000; line-height:17px; margin:0 0 0 0;"; /// webContent.Navigate("about:blank"); /// } /// private void radText_CheckedChanged(object sender, EventArgs e) /// { /// CHtml.ShowHtml(webContent, txtContent.Text, radHtml.Checked, CCommon.ContentStyle); /// } /// private void radHtml_CheckedChanged(object sender, EventArgs e) /// { /// CHtml.ShowHtml(webContent, txtContent.Text, radHtml.Checked, CCommon.ContentStyle); /// } /// private void txtContent_TextChanged(object sender, EventArgs e) /// { /// CHtml.ShowHtml(webContent, txtContent.Text, radHtml.Checked, CCommon.ContentStyle); /// } /// </code> /// </example> public static void ShowHtml(WebBrowser web, string Html, bool IsAllowHtmlTag, string Style) { Html = CHtml.ReplaceHtmlToShow(Html, IsAllowHtmlTag); ShowHtml(web, Html, Style); }