Durchlaufen eine html-Zeichenfolge zu finden, die alle img-tags und ersetzen Sie das src-Attribut Werte
Habe ich einen html-code als string. Ich muss alle img-tags in string, Lesen Sie den Wert der einzelnen src-Attribut und übergeben es an einer Funktion, die Funktion gibt einen kompletten img-tag, dass muss an die Stelle des img-Tags Lesen.
Er braucht Sie zum Durchlaufen der ganzen Reihe, und führen Sie die gleiche Logik für alle img-tags.
Angenommen, dass meine html-string sieht wie folgt aus:
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..." />"
Ich habe den folgenden code, mit dem man das erste img-tag, nimmt der src-Wert (das ist ein base64-string) und konvertiert es in ein array von bits zu erzeugen ein stream, dann kann ich erstellen Sie eine neue src-Wert, die einen link zu dem stream.
//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 + @"'/>");
Wie Sie sehen können finnaly ich habe das neue img-tag ersetzen:
<img src='cid:" + inline.ContentId + @"'/>
Aber der code ersetzt alle img-Tags mit dem gleichen Inhalt. Ich muss in der Lage sein, um das img-tag, führen Sie die Logik, die ihn ersetzen und dann weiter mit dem nächsten img-tag.
Hoffe, Sie können mir eine Ahnung, wie ich das tun kann. Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich verstehe Ihr Bedürfnis, die Sie richtig verwenden können HtmlAgilityPack für diesen Zweck. Mit regex kann zu unerwünschten Verhalten. Kannst du versuchen den code unten ?
Können Sie abrufen HtmlAgilityPack von https://www.nuget.org/packages/HtmlAgilityPack
Hoffe, das hilft
Ich glaube, Sie brauchen zum Durchlaufen von code für jedes img holte form der Zeichenfolge.
Der folgende code gibt dir eine Liste von allen img-tags:
diese Liste verwenden, und Benutzer, die Logik in einer Schleife:
Hoffe, es funktioniert für Sie.
Ist auch der beste Weg, um zu analysieren, HTML-dom ist die Verwendung HtmlAgilityPack wie von anderen erwähnt.