Rimuovi i tag "img" e "a" da node.InnerHtml

c# html html-agility-pack

Domanda

Voglio estrarre solo il testo dal mio 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);
    }
}

ora nel mio nodo.InnerHtml è questo 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);
    }
}

come rimuovere img e un tag?

il tag img non ha il tag di chiusura

Risposta accettata

Non sono sicuro di capire che cosa significa il punto 2. Ma se vuoi rimuovere tutti gli elementi <img> da un HtmlNode , puoi provare in questo modo:

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

Remove() rimuoverà HtmlNode dal suo genitore. Funziona perfettamente per me per rimuovere gli elementi <img> , anche senza chiudere il tag.

AGGIORNARE :

Puoi usare questa espressione XPath per selezionare tutti gli elementi <img> e <a> in una singola query:

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

quindi puoi scorrere il set di risultati una volta per rimuoverli.


Risposta popolare

Fare riferimento a questo remove html node (img) dall'esempio htmldocument . puoi anche fare così:

       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);
        }
    }



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché