如何替換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論壇上看到了很多代碼示例。但沒有什麼比我想要的更接近。一個帖子真的很有用,但它是用於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 Comment的節點類型

非常精確,有許多不同的例子類型,正是我所追求的。


熱門答案

這裡回答:

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

注意:ToList是必需的,因為您無法更改要枚舉的序列。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow