Elimine las etiquetas "img" y "a" de node.InnerHtml

c# html html-agility-pack

Pregunta

Quiero extraer solo texto de mi html

var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

foreach (var node in Doc.DocumentNode.ChildNodes)
{
    if (node.Name == "strong" || node.Name == "#text" 
        || node.Name == "br" || node.Name == "div" 
        || node.Name == "p" || node.Name != "img")
    {
        sb.Append(node.InnerHtml);
    }
}

ahora en mi node.InnerHtml es este html:

1.

var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

foreach (var node in Doc.DocumentNode.ChildNodes)
{
    if (node.Name == "strong" || node.Name == "#text" 
        || node.Name == "br" || node.Name == "div" 
        || node.Name == "p" || node.Name != "img")
    {
        sb.Append(node.InnerHtml);
    }
}

2.

var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

foreach (var node in Doc.DocumentNode.ChildNodes)
{
    if (node.Name == "strong" || node.Name == "#text" 
        || node.Name == "br" || node.Name == "div" 
        || node.Name == "p" || node.Name != "img")
    {
        sb.Append(node.InnerHtml);
    }
}

¿Cómo eliminar img y las etiquetas?

La etiqueta img no tiene la etiqueta de cierre

Respuesta aceptada

No estoy seguro de entender lo que significa el no.2. Pero si desea eliminar todo el elemento <img> de un HtmlNode , puede intentar de esta manera:

var imgs = node.SelectNodes("//img");
foreach (var img in imgs)
{
    img.Remove();
}

Remove() eliminará HtmlNode de su padre. Esto funciona bien para que elimine los elementos <img> , incluso sin cerrar la etiqueta.

ACTUALIZACIÓN:

Puede usar esta expresión XPath para seleccionar todos los elementos <img> y <a> en una sola consulta:

var imgs = node.SelectNodes("//img");
foreach (var img in imgs)
{
    img.Remove();
}

luego puede iterar a través del conjunto de resultados una vez para eliminar cada uno de ellos.


Respuesta popular

Consulte este eliminar el nodo html (img) de la muestra htmldocument . También puedes hacer eso.

       var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

        foreach (var node in doc.DocumentNode.ChildNodes)
    {
        if (node.Name != "img" && node.Name!="a")
        {
            sb.Append(node.InnerHtml);
        }
    }



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué