c# - HtmlAgilityPack 修改 html 并返回更新的内容
问题描述
我没有经常使用 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);
}
解决方案
好的,我找不到任何内置在敏捷包中的东西来做我想做的事。
使用下面的代码后,我设法实现了我的目标
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);
}
推荐阅读
- mysql - 从mysql表中删除重复值但保留一个
- django - 如何缩小 Django DetailView 导出到 CSV 文件的范围
- javascript - 将导入的样式对象传递给自定义挂钩无法按预期工作
- windows - Windows 应用商店包和预编译头文件
- android - 在Android中调用Activity.setRequestedOrientation(...)时出现黑屏
- java - 如何在不使用拆分、子字符串或索引的情况下在某个字符处剪切字符串?
- c# - 如何使 endDate 的日期仅在 startdate 的日期之后选择 ASP.NET
- python - 将值附加到特定列 openpyxl
- django - django-storages + private S3 bucket - 如何将用户名设为文件夹名称?
- google-cloud-platform - 翻译 API 命令行快速入门失败