HTMLコメントを置き換える方法 string.Emptyのタグ

c# html html-agility-pack

質問

私は私のhtmlNodeからすべてのHTMLのコメントタグを削除しようとしています、次は私のC#のHtmlNodeの選択コードです

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

以下のHtmlNode疑似マークアップコードを返しました

<table>
  <tr>
    <td>test</td>
    <td>
      <!-- <a href='url removed' >Test link Test 2 Comment </a> -->
    </td>
  </tr>
</table>​

私は問題を解決するために正規表現を設定することができましたが、C#コードは次のようになります。しかし、私のテストでは正常に動作し、入力タイプは文字列としてしか動作しませんでした。以下のc#コードを参照してください。

string rkr;
rkr = "<!-- <a href='url removed' >Test link Test 2 Comment </a> -->";
rkr = Regex.Replace(rkr, @"(\<!--\s*.*?((--\>)|$))",String.Empty);

結果= ""それは私がすべてのタグのためにライブで実行したいものです。

私はフォーラムやstackoverflowフォーラムで多くのコード例を見てきました。何も私が望むものに近いものはありません。 1つのポストは本当に便利でしたが、PHP用でした。

さて、上記Regex.Replace関数で私が入力した場合

rkr = Regex.Replace(table, @"(\<!--\s*.*?((--\>)|$))",String.Empty);

私は次のエラーになる

'System.Text.RegularExpressions.Regex.Replace(string、System.Text.RegularExpressions.MatchEvaluator、int)'に最適なオーバーロードされたメソッドがいくつかの無効な引数を持っています

私も変換しようとした

rkr = Regex.Replace(table.ToString(), @"(\<!--\s*.*?((--\>)|$))",String.Empty);

しかし、私はrkr = "HtmlAgilityPack.HtmlNode"戻り値を取得します。

どんな助けでも大きな助けになるでしょう。

受け入れられた回答

皆さんのお手伝いをありがとうございます。次の機能の解決策を見つけました。

以下のようにdoc5を移植した後に関数を呼び出しただけです

HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");

RemoveComments(table);

public static void RemoveComments(HtmlNode node)
{
    foreach (var n in node.ChildNodes.ToArray())
        RemoveComments(n);
    if (node.NodeType == HtmlNodeType.Comment)
        node.Remove();
}

参考までに:私は次のポストで答えを見つけました。 HTMLAgilityPackを使用してHtmlNodeTypeであるノードタイプを選択する方法

非常に正確で、多くの異なるサンプルの種類、正確に私がしていたもの。


人気のある回答

ここで答え

doc5.DocumentNode.Descendants()
    .Where(n => n.NodeType == HtmlAgilityPack.HtmlNodeType.Comment)
    .ToList()
    .ForEach(n => n.Remove());

注:列挙している順序を変更することはできないため、ToListが必要です。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ