public static void Main()
string xmlText = "<root><AccountRef name=\"NW Op - M&T BANK #123456\" alias=\"M&T BANK\">99&B</AccountRef><AccountRef name=\"NW Op - M&T BANK #123456\"><SubData>99-B&100-B>2</SubData></AccountRef></root>";
Console.WriteLine("Original XML:");
Console.WriteLine(xmlText);
string wellFormedXml = EscapeAttributesAndNodeValues(xmlText);
Console.WriteLine("\nEscaped XML:");
Console.WriteLine(wellFormedXml);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(wellFormedXml);
Console.WriteLine("\nValid XML 🥳.");
Console.WriteLine($"\nInvalid XML 😞: {ex.Message}");
static string EscapeAttributesAndNodeValues(string xml)
var result = System.Text.RegularExpressions.Regex.Replace(xml,
@"(\w+\s*=\s*"")([^""]*)(""\s*)",
m => $"{m.Groups[1].Value}{EscapeXmlCharacters(m.Groups[2].Value)}{m.Groups[3].Value}");
result = System.Text.RegularExpressions.Regex.Replace(result,
m => $">{EscapeXmlCharacters(m.Groups[1].Value)}<");
static string EscapeXmlCharacters(string value)
var result = value.Replace("&", "&")