0

私は文字列を持っています:

<div class="className1234"><p>Some html</p></div>

この文字列から取得したいのは、<p>Some html</p>つまり、クラスに「className」が含まれているという事実に基づいて、周囲の div タグを削除したいということです。

私が試したこと

私が試したことは機能しますが、それはぎこちなく、正規表現などのより良い代替手段があることを知っています。私が現在行っているのは、一連のsubstring(),indexof()をチェーンreplace()し、div を削除する呼び出しです。

編集:「innerhtml」というフレーズを使用したのは、その中のタグに関して文字列を操作できるライブラリがどこかにあると思いたいからです。

注意: これには JQuery は関係ありません。それはすべてサーバー側の C# です。 (タグ参照)

4

4 に答える 4

4

Html Agility Packをお勧めします。これは、フレームワークでの XML の組み込みサポートのような、html ドキュメントでの操作を可能にするように設計されています。

やり過ぎかもしれませんが、作業は簡単に完了し、悪い html を気にする必要はありません。

于 2013-01-25T11:04:45.850 に答える
2

どうですか:

XmlDocument doc = new XmlDocument();
doc.LoadXml(divStr);
// classAtr will be null if the root is not a div with a class with the value className1234
XmlNode classAtr = doc.SelectSingleNode("/div/@class[contains(., 'className1234')]");
string result = classAtr != null ? doc.DocumentElement.InnerXml : divStr;
于 2013-01-25T11:02:33.203 に答える
2

HTML を操作する必要があるときはいつでも、専用の HTML パーサー/DOM ライブラリを使用する必要があります。ここで StackOverflow for .Net で推奨されているライブラリの 1 つがHTMLAgilityPackです。

于 2013-01-25T11:04:56.807 に答える
0

HtmlAgilityPack が html 解析に最適であると他の人が言ったように、HtmlAgilityPack サイトから HAP Explorer をダウンロードし、それを使用して選択をテストしてください。とにかく、この SelectNode コマンドは次のようになります。

  HtmlDocument doc = new HtmlDocument();
  doc.Load(htmlFile);
  var myNodes = doc.DocumentNode.SelectNodes("/div/@class[. = 'className1234']");
  foreach (HtmlNode node in myNodes)
  {
    // you code

  }
于 2013-01-25T11:11:33.417 に答える