Use HtmlAgilityPack para determinar si la cadena contiene SOLAMENTE etiquetas de la lista de etiquetas permitidas

c# html-agility-pack

Pregunta

cf / Búsqueda de cadenas HTML en documentos y preguntas similares.

He visto ejemplos de uso de HtmlAgilityPack para analizar a través de una cadena en busca de etiquetas específicas, pero ¿qué HtmlAgilityPack si quiero asegurarme de que la cadena de entrada SÓLO contenga cadenas de una lista List<string> AllowedTags ?

En otras palabras, ¿cómo puedo iterar sobre doc.DocumentNode.Descendants para identificar el nombre de la etiqueta y verificar si está en la lista?

Respuesta aceptada

var allowedTags = new List<string> { "html", "head", "body", "div" };

bool containsOnlyAllowedTags =
         doc.DocumentNode
            .Descendants()
            .Where(n => n.NodeType == HtmlNodeType.Element)
            .All(n => allowedTags.Contains(n.Name));

Respuesta popular

List<string> AllowedTags = new List<string>() { "br", "a" };
HtmlDocument goodDoc = new HtmlDocument();
goodDoc.LoadHtml("<a href='asdf'>asdf</a><br /><a href='qwer'>qwer</a>");
bool containsBadTags = goodDoc.DocumentNode .Descendants()
                                            .Where(node => node.NodeType == HtmlNodeType.Element)
                                            .Select(node => node.Name)
                                            .Except(AllowedTags)
                                            .Any();
HtmlDocument badDoc = new HtmlDocument();
badDoc.LoadHtml("<a href='asdf'><b>asdf</b></a><br /><a href='qwer'>qwer</a>");
containsBadTags = badDoc.DocumentNode   .Descendants()
                                        .Where(node => node.NodeType == HtmlNodeType.Element)
                                        .Select(node => node.Name)
                                        .Except(AllowedTags)
                                        .Any();



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué