using System.Collections.Generic;
public static void Main()
string x = @"<svg/onload=alert('XSS')>";
HtmlDocument doc = new();
doc.DocumentNode.Descendants()
.Where(node => node.Name == "script")
.ForEach(node => node.Remove());
var l = doc.DocumentNode.SelectNodes("//@*[starts-with(local-name(),'on')]");
foreach(HtmlNode item in doc.DocumentNode.SelectNodes("//@*[starts-with(local-name(),'on')]")) {
item.Attributes.Where(a => a.Name.StartsWith("on")).ToList().ForEach(a => a.Remove());
public class NodePositions
public NodePositions(HtmlDocument doc)
AddNode(doc.DocumentNode);
Nodes.Sort(new NodePositionComparer());
private void AddNode(HtmlNode node)
foreach (HtmlNode child in node.ChildNodes)
private class NodePositionComparer : IComparer<HtmlNode>
public int Compare(HtmlNode x, HtmlNode y)
return x.StreamPosition.CompareTo(y.StreamPosition);
public List<HtmlNode> Nodes = new List<HtmlNode>();