如何用 string.Empty 替换 Html Comment <!-- comment --> 标签
How to replace Html Comment <!-- comment --> tags with string.Empty
我正在尝试从我的 htmlNode 中删除所有 Html 注释标签,以下是我的 c#
中的 Html 节点选择代码
HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");
returned Html下面的节点伪标记代码
<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);
结果 =“”。这就是我想要的 运行 所有标签。
我在论坛和Whosebug 论坛上看到了很多代码示例。但没有什么接近我想要的。一个 post 真的很有用,但它是给 php 的 - 所以还是没用。
现在,如果在上面的 Regex.Replace 函数中输入
rkr = Regex.Replace(table, @"(\<!--\s*.*?((--\>)|$))",String.Empty);
我收到以下错误
The best overloaded method match for
'System.Text.RegularExpressions.Regex.Replace(string,
System.Text.RegularExpressions.MatchEvaluator, int)' has some invalid
arguments
我也试过转换
rkr = Regex.Replace(table.ToString(), @"(\<!--\s*.*?((--\>)|$))",String.Empty);
但后来我得到 rkr = "HtmlAgilityPack.HtmlNode" return 值。
任何帮助都是很大的帮助。
已回答here:
doc5.DocumentNode.Descendants()
.Where(n => n.NodeType == HtmlAgilityPack.HtmlNodeType.Comment)
.ToList()
.ForEach(n => n.Remove());
注意:ToList 是必需的,因为您不能更改您正在枚举的序列。
谢谢大家的帮助。我在以下功能中找到了解决方案。
填充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();
}
供参考:我在下面post中找到了答案。 How to select node types which are HtmlNodeType Comment using HTMLAgilityPack
非常精确,有许多不同的示例类型,正是我所追求的。
我正在尝试从我的 htmlNode 中删除所有 Html 注释标签,以下是我的 c#
中的 Html 节点选择代码HtmlNode table = doc5.DocumentNode.SelectSingleNode("//div[@id='div12']");
returned Html下面的节点伪标记代码
<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);
结果 =“”。这就是我想要的 运行 所有标签。
我在论坛和Whosebug 论坛上看到了很多代码示例。但没有什么接近我想要的。一个 post 真的很有用,但它是给 php 的 - 所以还是没用。
现在,如果在上面的 Regex.Replace 函数中输入
rkr = Regex.Replace(table, @"(\<!--\s*.*?((--\>)|$))",String.Empty);
我收到以下错误
The best overloaded method match for 'System.Text.RegularExpressions.Regex.Replace(string, System.Text.RegularExpressions.MatchEvaluator, int)' has some invalid arguments
我也试过转换
rkr = Regex.Replace(table.ToString(), @"(\<!--\s*.*?((--\>)|$))",String.Empty);
但后来我得到 rkr = "HtmlAgilityPack.HtmlNode" return 值。
任何帮助都是很大的帮助。
已回答here:
doc5.DocumentNode.Descendants()
.Where(n => n.NodeType == HtmlAgilityPack.HtmlNodeType.Comment)
.ToList()
.ForEach(n => n.Remove());
注意:ToList 是必需的,因为您不能更改您正在枚举的序列。
谢谢大家的帮助。我在以下功能中找到了解决方案。
填充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();
}
供参考:我在下面post中找到了答案。 How to select node types which are HtmlNodeType Comment using HTMLAgilityPack
非常精确,有许多不同的示例类型,正是我所追求的。