I'd like to build HTML source using System.Web.UI.HtmlTextWriter, code like this:
string html = string.Empty;
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{
using (System.IO.TextWriter writer = new System.IO.StreamWriter(stream,System.Text.Encoding.UTF8))
{
using (HtmlTextWriter output = new HtmlTextWriter(writer))
{
output.RenderBeginTag(HtmlTextWriterTag.Table);
output.RenderBeginTag(HtmlTextWriterTag.Tr);
output.RenderBeginTag(HtmlTextWriterTag.Td);
output.Write("Hello world!");
output.RenderEndTag();
output.RenderEndTag();
output.RenderEndTag();
output.Flush();
}
writer.Flush();
}
stream.Flush();
html = System.Text.Encoding.UTF8.GetString(stream.GetBuffer());
}
And now I short above code by my custom class WebStringBuilder as following:
using (WebStringBuilder output = new WebStringBuilder())
{
output.RenderBeginTag(HtmlTextWriterTag.Table);
output.RenderBeginTag(HtmlTextWriterTag.Tr);
output.RenderBeginTag(HtmlTextWriterTag.Td);
output.Write("Hello world!");
output.RenderEndTag();
output.RenderEndTag();
output.RenderEndTag();
output.Flush();
html = output.ToString();
}
public class WebStringBuilder : IDisposable
{
private MemoryStream stream;
private TextWriter writer;
private HtmlTextWriter output;
private bool closed = false;
public WebStringBuilder()
: this("\t")
{
}
public WebStringBuilder(string tabString)
{
stream = new MemoryStream();
writer = new StreamWriter(stream, System.Text.Encoding.UTF8);
output = new HtmlTextWriter(writer, tabString);
}
public void AddAttribute(string key, string value)
{
output.AddAttribute(key, value);
}
public void AddAttribute(HtmlTextWriterAttribute key, string value)
{
output.AddAttribute(key, value);
}
public void AddStyleAttribute(string name, string value)
{
output.AddStyleAttribute(name, value);
}
public void AddStyleAttribute(HtmlTextWriterStyle key, string value)
{
output.AddStyleAttribute(key, value);
}
public void RenderBeginTag(HtmlTextWriterTag tagKey)
{
output.RenderBeginTag(tagKey);
}
public void Write(string s)
{
output.Write(s);
}
public void Write(object value)
{
output.Write(value);
}
public void Write(string format, object arg0)
{
output.Write(format, arg0);
}
public void Write(string format, object arg0, object arg1)
{
output.Write(format, arg0, arg1);
}
public void Write(string format, params object[] arg)
{
output.Write(format, arg);
}
public void WriteLineNoTabs(string s)
{
output.WriteLineNoTabs(s);
}
public void WriteLine()
{
output.WriteLine();
}
public void WriteLine(string s)
{
output.WriteLine(s);
}
public void WriteLine(object value)
{
output.WriteLine(value);
}
public void WriteLine(string format, object arg0)
{
output.WriteLine(format, arg0);
}
public void WriteLine(string format, object arg0, object arg1)
{
output.WriteLine(format, arg0, arg1);
}
public void WriteLine(string format, params object[] arg)
{
output.WriteLine(format, arg);
}
public void RenderBeginTag(string tagName)
{
output.RenderBeginTag(tagName);
}
public void RenderEndTag()
{
output.RenderEndTag();
}
public virtual void Flush()
{
output.Flush();
writer.Flush();
stream.Flush();
}
public void Close()
{
output.Close();
writer.Close();
stream.Close();
closed = true;
}
public override string ToString()
{
return System.Text.Encoding.UTF8.GetString(stream.GetBuffer()).Trim().Trim(new char[] { '\0' });
}
#region IDisposable Members
public void Dispose()
{
if (!closed)
Close();
}
#endregion
}
Feel free to modify these codes as you need, let me know your improved modification is appreciated. Happy coding!
UPDATE
thanks advice from Patrik Hägne , first class shorten as:
public class WebStringBuilder : IDisposable
{
//private MemoryStream stream;
private TextWriter writer;
private HtmlTextWriter output;
private bool closed = false;
public WebStringBuilder()
: this("\t")
{
}
public WebStringBuilder(string tabString)
{
//stream = new MemoryStream();
writer = new StringWriter();//new StreamWriter(stream, System.Text.Encoding.UTF8);
output = new HtmlTextWriter(writer, tabString);
}
public void AddAttribute(string key, string value)
{
output.AddAttribute(key, value);
}
public void AddAttribute(HtmlTextWriterAttribute key, string value)
{
output.AddAttribute(key, value);
}
public void AddStyleAttribute(string name, string value)
{
output.AddStyleAttribute(name, value);
}
public void AddStyleAttribute(HtmlTextWriterStyle key, string value)
{
output.AddStyleAttribute(key, value);
}
public void RenderBeginTag(HtmlTextWriterTag tagKey)
{
output.RenderBeginTag(tagKey);
}
public void Write(string s)
{
output.Write(s);
}
public void Write(object value)
{
output.Write(value);
}
public void Write(string format, object arg0)
{
output.Write(format, arg0);
}
public void Write(string format, object arg0, object arg1)
{
output.Write(format, arg0, arg1);
}
public void Write(string format, params object[] arg)
{
output.Write(format, arg);
}
public void WriteLineNoTabs(string s)
{
output.WriteLineNoTabs(s);
}
public void WriteLine()
{
output.WriteLine();
}
public void WriteLine(string s)
{
output.WriteLine(s);
}
public void WriteLine(object value)
{
output.WriteLine(value);
}
public void WriteLine(string format, object arg0)
{
output.WriteLine(format, arg0);
}
public void WriteLine(string format, object arg0, object arg1)
{
output.WriteLine(format, arg0, arg1);
}
public void WriteLine(string format, params object[] arg)
{
output.WriteLine(format, arg);
}
public void RenderBeginTag(string tagName)
{
output.RenderBeginTag(tagName);
}
public void RenderEndTag()
{
output.RenderEndTag();
}
public virtual void Flush()
{
output.Flush();
writer.Flush();
//stream.Flush();
}
public void Close()
{
output.Close();
writer.Close();
//stream.Close();
closed = true;
}
public override string ToString()
{
return writer.ToString().Trim().Trim(new char[] { '\0' });
//return System.Text.Encoding.UTF8.GetString(stream.GetBuffer()).Trim().Trim(new char[] { '\0' });
}
#region IDisposable Members
public void Dispose()
{
if (!closed)
Close();
}
#endregion
}