Rimuovi stili specifici dall'attributo Style nella stringa Html utilizzando Html Agility Pack

c# html-agility-pack html-parsing

Domanda

Ho una stringa di Html e contiene vari Html ma include questo

<span style="display:block;position:fixed;width:100%;height:2000px;background-color:rgba(0,0,0,0);z-index:9999!important;top:0;left:0;cursor:default;"></span>

Questo sembrerà strano, ma voglio solo rimuovere elementi specifici all'interno dell'attributo style (per tutti gli elementi Html). Ad esempio voglio rimuovere

position:fixed e z-index:9999!important; e in top:0; e a left:0;

Per citarne alcuni, ma tieni tutto il resto. Ora il problema è che non è necessariamente la position:fixed; potrebbe essere la position:absolute; o qualsiasi altra cosa Proprio come potrebbe essere z-index:9998; o top:20; eccetera...

Devo essere in grado di rimuovere gli elementi di stile con la loro chiave, quindi position:*anything* e in top:*anything* ecc .... E farlo anche in modo non sensibile al caso. Quindi otterrebbe POSITION:*anything* o PoSition:*anything*

C'è un modo per ottenere questo utilizzando il pacchetto di agilità Html?

Risposta popolare

Non sembra esserci alcun supporto per l'analisi delle stringhe di stile inline nell'HTML Agility Pack, ma .NET ha alcune funzionalità per questo in System.Web.UI per supportare i controlli WebForms.

Si chiama CssStyleCollection e convertirà la stringa di style in una bella serie di coppie chiave / valore stringa e ti permetterà di rimuovere le chiavi specifiche che non vuoi.

Tuttavia, poiché è uno strumento interno per l'utilizzo di WebControl, non ha un costruttore pubblico. Invece, devi istanziarlo tramite riflessione, o usare un hack come questo;

CssStyleCollection style = new Panel().Style;

Una volta creato,

style.Value = "YOUR STYLE STRING"; 

E quindi rimuovere gli elementi che non si desidera;

style.Remove("position");
style.Remove("z-index");
style.Remove("top");
style.Remove("left");

Recupera la tua nuova stringa di stile delimitata da style.Value .

IMPORTANTE: non ho provato questo, ma il processo sembra abbastanza semplice, se un po 'hacky. Potrebbero esserci delle sorprese che non ho ancora incontrato. In particolare, non ho idea di come gestisca le situazioni in cui ci sono più impostazioni di stile duplicate nella stessa stringa;

top:0;margin-left:20;top:10; 

Nelle stringhe di stile inline, i browser rispettano l'ultimo valore specificato, quindi in top:10 vittorie. Tuttavia, poiché CssStyleCollection utilizza chiavi univoche, non può archiviare entrambi top valori top e molto probabilmente uno scarto.



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é