using System.Collections.Generic;
public static void Main()
var html = new HtmlBuilder("html");
html.AddChild("head", string.Empty).AddChild("script", string.Empty);
var body = html.AddChild("body", string.Empty);
body.AddChild("h1", "hello world");
var ulContainer = body.AddChild("p", "here is a list").AddChild("ul", string.Empty);
ulContainer.AddChild("li", i.ToString());
Console.WriteLine(html.ToString());
public string Name { get; set; }
public string Text { get; set; }
private StringBuilder sb = new StringBuilder();
public List<HtmlElement> Children = new List<HtmlElement>();
public HtmlElement(string name, string text)
public HtmlElement AddChild(string name, string text)
var htmlElement = new HtmlElement(name, text);
Children.Add(htmlElement);
public string ToHtmlString(int level = 0)
var indentString = new string(' ', indent * level);
sb.AppendLine($"<{Name}>").Append(indentString).Append(Text);
foreach(var htmlElement in Children)
sb.AppendLine(htmlElement.ToHtmlString(level+1));
sb.AppendLine($"</{Name}>");
private HtmlElement root;
public HtmlBuilder(string rootName)
root = new HtmlElement(rootName, string.Empty);
public HtmlElement AddChild(string name, string text)
var htmlElement = new HtmlElement(name, text);
root.Children.Add(htmlElement);
public override string ToString()
return root.ToHtmlString();