Rimuovi gli attributi usando HtmlAgilityPack

html html-agility-pack html-parsing

Domanda

Sto cercando di creare uno snippet di codice per rimuovere tutti gli attributi di style indipendentemente dal tag utilizzando HtmlAgilityPack .

Ecco il mio codice:

var elements = htmlDoc.DocumentNode.SelectNodes("//*");

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}

Tuttavia, non riesco a farlo attaccare? Se guardo l'oggetto element immediatamente dopo Remove("style") . Posso vedere che l'attributo style è stato rimosso , ma appare ancora nell'oggetto DocumentNode . : /

Mi sento un po 'stupido, ma mi sembra strano? Qualcuno ha fatto ciò usando HtmlAgilityPack? Grazie!

Aggiornare

Ho cambiato il mio codice di seguito e funziona correttamente:

var elements = htmlDoc.DocumentNode.SelectNodes("//*");

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}

Risposta accettata

Il tuo snippet di codice sembra essere corretto: rimuove gli attributi. Il fatto è, DocumentNode .InnerHtml (presumo che tu abbia monitorato questa proprietà) è una proprietà complessa, forse viene aggiornata dopo alcune circostanze sconosciute e in realtà non dovresti usare questa proprietà per ottenere il documento come una stringa. Invece del metodo HtmlDocument.Save per questo:

string result = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    result = writer.ToString();
}

ora la variabile result contiene la rappresentazione della stringa del documento.

Un'altra cosa: il tuo codice può essere migliorato cambiando la tua espressione in "//*[@style]" che ti dà solo elementi con l'attributo style .


Risposta popolare

Ecco una soluzione molto semplice

VB.net

element.Attributes.Remove(element.Attributes("style"))

c #

element.Attributes.Remove(element.Attributes("style"))



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é