我有一个作为字符串的html代码。我需要在该字符串中找到所有的img标签,读取每个src属性的值并将其传递给一个函数,该函数返回一个需要替换被读取的img标签的完整img标签。
它需要遍历整个字符串并对所有img标签执行相同的逻辑。
例如,假设我的html字符串如下所示:
string htmlBody= "<p>Hi everyone</p><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAA..." <p>I am here </p> <img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAC..." />"
我有以下代码,它可以找到第一个img标签,获取src值(这是一个base64字符串),并将其转换为位数组以创建一个流,然后我可以创建一个新的src值,指向该流。
//Remove from all src attributes "data:image/png;base64"
string res = Regex.Replace(htmlBody, "data:image\\/\\w+\\;base64\\,", "");
//Match the img tag and get the base64 string value
string matchString = Regex.Match(res, "<img.+?src=[\"'](.+?)[\"'].*?>", RegexOptions.IgnoreCase).Groups[1].Value;
var imageData = Convert.FromBase64String(matchString);
var contentId = Guid.NewGuid().ToString();
LinkedResource inline = new LinkedResource(new MemoryStream(imageData), "image/jpeg");
inline.ContentId = contentId;
inline.TransferEncoding = TransferEncoding.Base64;
//Replace all img tags with the new img tag
htmlBody = Regex.Replace(htmlBody, "<img.+?src=[\"'](.+?)[\"'].*?>", @"<img src='cid:" + inline.ContentId + @"'/>");
如您所见,我最终得到了新的img标记以替换:
<img src='cid:" + inline.ContentId + @"'/>
但代码将替换所有的img标签为相同的内容。我需要能够获取img标签,执行逻辑,替换它,然后继续下一个img标签。
希望您能给我一个想法,如何做到这一点。谢谢提前。