【问题标题】:HtmlAgilityPack modify html and return updated contentHtmlAgilityPack 修改 html 并返回更新的内容
【发布时间】:2019-12-11 14:04:57
【问题描述】:

我没有经常使用 HtmlAgilityPack,我陷入了以下问题。

我正在检查浏览器是否支持 WebP,如果支持,我会在图像的 src 中附加一个新参数。

我有这个工作,但我不知道如何返回更新的 HTML,任何帮助将不胜感激。

public static HtmlString AppendWebPString(HtmlString htmlText)
        {

            bool browserSupportsWebP = BrowserSupportsWebPHelper.WebPSupported();

            if (!browserSupportsWebP) return htmlText;

            var h = new HtmlDocument();
            h.LoadHtml(htmlText.ToString());

            const string webP = "&quality=80&format=webp";

            if (h.DocumentNode.SelectNodes("//img[@src]") == null) return htmlText;

            string imgOuterHtml = string.Empty;
            foreach (HtmlNode image in h.DocumentNode.SelectNodes("//img[@src]"))
            {
                var src = image.Attributes["src"].Value.Split('&');
                image.SetAttributeValue("src", src[1] + string.Format(webP));
                imgOuterHtml = image.OuterHtml;
            }

            //How do I return the updated html here
            return new HtmlString(h.ParsedText);
        }

【问题讨论】:

    标签: c# .net html-agility-pack


    【解决方案1】:

    好的,我找不到敏捷包中内置的任何东西来做我想做的事。

    使用下面的代码后,我已经成功地实现了我的目标

    public static HtmlString AppendWebPString(HtmlString htmlText)
            {
    
                bool browserSupportsWebP = BrowserSupportsWebPHelper.WebPSupported();
    
                if (!browserSupportsWebP) return htmlText;
    
                var h = new HtmlDocument();
                h.LoadHtml(htmlText.ToString());
    
                const string webP = "&quality=80&format=webp";
    
                if (h.DocumentNode.SelectNodes("//img[@src]") == null) return htmlText;
    
                string modifiedHtml = htmlText.ToString();
    
                List<ReplaceImageValues> images = new List<ReplaceImageValues>();
                foreach (HtmlNode image in h.DocumentNode.SelectNodes("//img[@src]"))
                {
    
                    var src = image.Attributes["src"].Value.Split('&');
                    string oldSrcValue = image.OuterHtml;
                    image.SetAttributeValue("src", src[0] + src[1] + string.Format(webP));
                    string newSrcValue = image.OuterHtml;
                    images.Add(new ReplaceImageValues(oldSrcValue,newSrcValue));
                }
    
    
                foreach (var newImages in images)
                {
                    modifiedHtml = modifiedHtml.Replace(newImages.OldVal, newImages.NewVal);
                }
                return new HtmlString(modifiedHtml);
            }
    

    【讨论】:

    • 问题,你拆分 image.Attributes["src"] 的原因是什么?您实际上是在删除 & 符号。
    猜你喜欢
    • 2023-01-23
    • 2014-03-23
    • 2016-09-10
    • 2018-09-16
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多