Verwenden Sie HtmlAgilityPack, um zu ermitteln, ob die Zeichenfolge NUR TAGs aus der Liste der zulässigen Tags enthält

c# html-agility-pack

Frage

cf / Suchen von HTML-Strings in Dokumenten und ähnlichen Fragen.

Ich habe Beispiele für die Verwendung von HtmlAgilityPack zum HtmlAgilityPack einer Zeichenfolge bei der Suche nach bestimmten Tags gesehen. Was aber, wenn ich sicherstellen möchte, dass die Eingabezeichenfolge NUR Zeichenfolgen aus einer Liste enthält: List<string> AllowedTags ?

Mit anderen Worten: Wie kann ich über doc.DocumentNode.Descendants iterieren, um den Tag-Namen zu identifizieren und zu überprüfen, ob er in der Liste enthalten ist?

Akzeptierte Antwort

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

Beliebte Antwort

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum