如何使用HTML敏捷包注释掉html文档中的所有脚本标记

c# comments html-agility-pack

我想注释掉HtmlDocument中的所有脚本标记。这样,当我渲染文档时,脚本不会被执行,但我们仍然可以看到那里有什么。不幸的是,我目前的做法是失败的:

foreach (var scriptTag in htmlDocument.DocumentNode.SelectNodes("//script"))
            {
                var commentedScript = new HtmlNode(HtmlNodeType.Comment, htmlDocument, 0) { InnerHtml = scriptTag.ToString() };
                scriptTag.ParentNode.AppendChild(commentedScript);
                scriptTag.Remove();
            }

请注意,我可以使用html上的替换函数来执行此操作,但我认为它不会那么强大:

domHtml = domHtml.Replace("<script", "<!-- <script");
domHtml = domHtml.Replace("</script>", "</script> -->");

一般承认的答案

尝试这个:

foreach (var scriptTag in htmlDocument.DocumentNode.SelectNodes("//script"))
        {
            var commentedScript = HtmlTextNode.CreateNode(string.Format("<!--{0}-->", scriptTag.OuterHtml));
            scriptTag.ParentNode.ReplaceChild(commentedScript, scriptTag);
        }

热门答案

请参阅此SO帖子 - 非常干净的解决方案利用HTML Agility Pack的Linq查询支持: htmlagilitypack - 删除脚本和样式?



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow