如何使用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 - 刪除腳本和样式?



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因