Reemplazar imágenes con texto alternativo paquete de agilidad html

asp.net c# html-agility-pack

Pregunta

Necesito analizar HTML para imágenes y reemplazar esas etiquetas con una nueva etiqueta que solo tiene el texto que está contenido en la alternativa. ¿Puede alguien mostrar cómo hacer esto tanto con linq como con el uso estándar?

He estado usando un ejemplo de linq ahora para reemplazar párrafos. Pero, estoy recibiendo un error de sólo lectura.

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);      
    IEnumerable<HtmlNode> paragraphs = doc.DocumentNode.DescendantNodes().Where(p => p.Name.ToLower() == "p");
    foreach (HtmlNode p in paragraphs)
    {
        p.InnerText = "Hello World";
    }

¿También hay una manera fácil de transferirlo de nuevo al texto? Es decir, salida como cadena

Esto es lo que tengo que no funciona.

MemoryStream outStream = new MemoryStream();
doc.Save(outStream);


outStream.Seek(0, SeekOrigin.Begin);
StreamReader reader = new StreamReader( outStream );
string text = reader.ReadToEnd();

Respuesta aceptada

var images = doc.DocumentNode.SelectNodes("//img");
if (images != null)
{
    foreach (HtmlNode image in images)
    {
        var alt = image.GetAttributeValue("alt", "");
        var nodeForReplace = HtmlTextNode.CreateNode(alt);
        image.ParentNode.ReplaceChild(nodeForReplace, image);
    }
}

var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
{
    doc.Save(writer);
}


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow