質問: 私はHTMLの文字列を持っていて、それはさまざまなHTMLを含んでいますが、これを含んでいます ``` ``` これは変わったように見えますが、スタイル属性内の特定の項目を削除したいだけです(すべての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`値を格納することはできません。