using System.Collections.Generic;
public class HtmlToTextConverter
private static readonly HashSet<string> CorrespondenceFields = new HashSet<string>
public static string ConvertHtmlToText(string htmlContent)
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlContent);
return HtmlNodeToText(htmlDoc.DocumentNode).Trim();
public static string HtmlNodeToText(HtmlNode node)
if (node.NodeType == HtmlNodeType.Text)
return HtmlEntity.DeEntitize(node.InnerText).Trim();
if (node.NodeType == HtmlNodeType.Element && CorrespondenceFields.Contains(node.Name))
return $"<{node.OriginalName}>{HtmlNodeToTextChildren(node)}";
return HtmlNodeToTextChildren(node);
private static string HtmlNodeToTextChildren(HtmlNode node)
foreach (var child in node.ChildNodes)
result += HtmlNodeToText(child);
public static void Main()
string htmlInput = "<html><body><Shop.Name>Test</body></html>";
string plainText = HtmlToTextConverter.ConvertHtmlToText(htmlInput);
Console.WriteLine(plainText);