Utilizzare HtmlAgilityPack per determinare se la stringa contiene SOLO tag dall'elenco di tag consentiti

c# html-agility-pack

Domanda

cf / Ricerca di stringhe HTML in documenti e domande simili.

Ho visto esempi di utilizzo di HtmlAgilityPack per analizzare una stringa alla ricerca di tag specifici, ma cosa succede se voglio assicurarmi che la stringa di input contenga SOLO stringhe da un elenco List<string> AllowedTags ?

In altre parole, come posso eseguire iterate su doc.DocumentNode.Descendants per identificare il nome del tag e controllare se è presente nell'elenco?

Risposta accettata

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));

Risposta popolare

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();



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché