Html Agility Packを使用してHtml文字列のStyle属性からストリップ固有のスタイルを削除する

c# html-agility-pack html-parsing

質問

私はHTMLの文字列を持っていて、それはさまざまなHTMLを含んでいますが、これを含んでいます

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

これは変わったように見えますが、スタイル属性内の特定の項目を削除したいだけです(すべてのHTML要素に対して)。たとえば、削除したい

position:fixedおよびz-index:9999!important; top:0; left:0;

いくつかの名前を付けるが、それ以外のものはすべて保持する。問題は、必ずしもposition:fixed;はなく、 position:fixed;それはposition:absolute;かもしれないposition:absolute;または何でも。ちょうどそれがz-index:9998;となることができるようにz-index:9998;またはtop:20;等...

私は、キーでスタイル要素を取り除くことができるようにする必要がありますので、 position:*anything*top:*anything* etc ...と同様に、大文字と小文字を区別しない方法で配置します。だからPOSITION:*anything* PoSition:*anything*

Html Agility Packを使用してこれを達成する方法はありますか?

人気のある回答

HTMLアジリティパックにはインラインスタイルの文字列解析がサポートされていないようですが、.NETにはSystem.Web.UI Webフォームコントロールをサポートするための機能がいくつかあります。

これはCssStyleCollectionと呼ばれ、 style文字列を文字列のキーと値のペアの素敵な配列に変換し、必要のない特定のキーを削除することができます。

ただし、WebControl用の内部ツールであるため、パブリックコンストラクタはありません。代わりに、リフレクションでインスタンス化するか、このようなハックを使用する必要があります。

CssStyleCollection style = new Panel().Style;

作成されると、

style.Value = "YOUR STYLE STRING"; 

そして、あなたが望んでいない項目を削除してください。

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

style.Valueから区切られた新しいスタイル文字列を取得します。

重要:私はこれをテストしていませんが、ちょっとハッキリしていれば、プロセスは十分に単純です。私がまだ遭遇していないいくつかの驚きがあるかもしれません。特に、同じ文字列内に複数の重複スタイル設定がある状況をどのように処理するかはわかりません。

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

インラインスタイルの文字列では、ブラウザは最後に指定された値を尊重します。したがって、 top:10勝ちます。ただし、 CssStyleCollectionは一意のキーを使用するため、 top値を格納することはできません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow