Supprimer les styles spécifiques de l'attribut Style dans une chaîne HTML à l'aide de Html Agility Pack

c# html-agility-pack html-parsing

Question

J'ai une chaîne de code HTML qui contient du code HTML varié, mais qui comprend

<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>

Cela semblera étrange, mais je veux seulement supprimer des éléments spécifiques dans l'attribut style (Pour tous les éléments HTML). Par exemple je veux enlever

position:fixed et z-index:9999!important; et en top:0; et à left:0;

Pour en nommer quelques-uns, mais gardez tout le reste. Maintenant, le problème est, ce n'est pas nécessairement la position:fixed; cela pourrait être la position:absolute; ou peu importe. Tout comme il pourrait être z-index:9998; ou en top:20; etc...

Je dois être capable de supprimer les éléments de style par leur clé, donc position:*anything* et en top:*anything* etc ... ET faites aussi cela d'une manière non sensible à la casse. Ainsi, il obtiendrait POSITION:*anything* ou PoSition:*anything*

Existe-t-il un moyen d'y parvenir en utilisant le pack d'agilité HTML?

Réponse populaire

Il semble que l’analyse de chaînes de style en ligne ne soit pas prise en charge dans HTML Agility Pack, mais .NET possède certaines fonctionnalités à cet effet dans System.Web.UI pour la prise en charge des contrôles WebForms.

Elle s'appelle CssStyleCollection et convertira votre chaîne de style en un joli tableau de paires clé / valeur de chaîne et vous permettra de supprimer les clés spécifiques que vous ne souhaitez pas.

Cependant, puisqu'il s'agit d'un outil interne à l'utilisation de WebControl, il ne possède pas de constructeur public. Au lieu de cela, vous devez l'instancier par réflexion, ou utiliser un hack comme celui-ci;

CssStyleCollection style = new Panel().Style;

Une fois créé,

CssStyleCollection style = new Panel().Style;

Et puis retirez les objets que vous ne voulez pas;

CssStyleCollection style = new Panel().Style;

Récupérez votre nouvelle chaîne de style délimité à partir de style.Value .

IMPORTANT: Je n'ai pas testé cela, mais le processus semble assez simple, même s'il est un peu compliqué. Il y a peut-être des surprises que je n'ai pas encore rencontrées. En particulier, je n'ai aucune idée de la façon dont il gère les situations dans lesquelles il existe plusieurs paramètres de style de duplication dans la même chaîne;

CssStyleCollection style = new Panel().Style;

Dans les chaînes de style en ligne, les navigateurs respectent la dernière valeur spécifiée, donc top:10 victoires. Cependant, CssStyleCollection utilisant des clés uniques, il ne peut pas stocker à la fois top valeurs top et les élimine fort probablement.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi