如何将 Html 注释 标记替换为字符串.空

本文关键字:注释 替换 字符串 Html | 更新日期: 2023-09-27 17:57:00

>我正在尝试从我的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的 - 所以再次没有用。

现在,如果在上面的正则表达式.替换函数中我输入

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"返回值。

任何帮助都会有很大的帮助。

如何将 Html 注释<!--注释 --> 标记替换为字符串.空

谢谢大家的帮助。我在以下功能中找到了解决方案。

填充 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 是必需的,因为您无法更改要枚举的序列。