我试图从我的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的节点类型
非常精确,有许多不同的例子类型,正是我所追求的。