Wie man HTML-Kommentar ersetzt Tags mit String.Empty

c# html html-agility-pack

Frage

Ich versuche, alle HTML-Kommentar-Tags von meinem HTML-Knoten zu entfernen, im Folgenden ist der HtmlNode-Auswahlcode von meinem c #

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

gab unten den HtmlNode-Pseudo-Markup-Code zurück

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

Ich habe es geschafft, Regulären Ausdruck zu konfigurieren, um mein Problem zu lösen, c # -Code ist wie folgt. Aber, nur in meinem Testlauf lief es erfolgreich und mit dem Eingabetyp als String. Siehe den c # -Code unten.

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

Ergebnis = "". was ich möchte in Live-Lauf für alle Tags.

Ich habe viele Code-Beispiele in Foren und Stackoverflow-Forum gesehen. aber nichts ist nahe, was ich will. Ein Beitrag war wirklich nützlich, aber es war für PHP - also wieder keinen Nutzen.

Nun, wenn in der obigen Regex.Replace-Funktion gebe ich ein

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

Ich bekomme folgenden Fehler

Die beste überladene Methodenübereinstimmung für 'System.Text.RegularExpressions.Regex.Replace (string, System.Text.RegularExpressions.MatchEvaluator, int)' hat einige ungültige Argumente

Ich habe auch versucht zu konvertieren

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

Aber dann bekomme ich rkr = "HtmlAgilityPack.HtmlNode" Rückgabewert.

Jede Hilfe wäre eine große Hilfe.

Akzeptierte Antwort

Danke Ihnen allen für Ihre Hilfe. Ich habe eine Lösung in folgender Funktion gefunden.

Ich habe die Funktion nach dem Auffüllen des Doc5 wie folgt aufgerufen

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();
}

Als Referenz: Ich habe die Antwort in dem folgenden Post gefunden. So wählen Sie Knotentypen aus, bei denen es sich um HtmlNodeType Comment mit HTMLAgilityPack handelt

sehr präzise und mit vielen verschiedenen Beispieltypen genau das, was ich suchte.


Beliebte Antwort

Beantwortet hier :

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

Hinweis: ToList ist erforderlich, da Sie die Reihenfolge, die Sie aufzählen, nicht ändern können.




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum