gpt4 book ai didi

c# - 如何使用 HTMLAgilityPack 选择 HtmlNodeType.Comment 的节点类型

转载 作者:行者123 更新时间:2023-11-30 13:42:06 25 4
gpt4 key购买 nike

我想从 html 中删除类似的东西

<!--[if gte mso 9]>
...
<![endif]-->


<!--[if gte mso 10]>
...
<![endif]-->

如何使用 HTMLAgilityPack 在 C# 中执行此操作?

我正在使用

static void RemoveTag(HtmlNode node, string tag)
{
var nodeCollection = node.SelectNodes("//"+ tag );
if(nodeCollection!=null)
foreach (HtmlNode nodeTag in nodeCollection)
{
nodeTag.Remove();
}
}

对于普通标签。

最佳答案

        public static void RemoveComments(HtmlNode node)
{
foreach (var n in node.ChildNodes.ToArray())
RemoveComments(n);
if (node.NodeType == HtmlNodeType.Comment)
node.Remove();
}


static void Main(string[] args)
{
var doc = new HtmlDocument();
string html = @"<!--[if gte mso 9]>
...
<![endif]-->

<body>
<span>
<!-- comment -->
</span>
<!-- another comment -->
</body>

<!--[if gte mso 10]>
...
<![endif]-->";
doc.LoadHtml(html);

RemoveComments(doc.DocumentNode);
Console.WriteLine(doc.DocumentNode.OuterHtml);
Console.ReadLine();

}

或者一个有趣的小 LINQ 风格:

public static IEnumerable<HtmlNode> Walk(HtmlNode node)
{
yield return node;
foreach (var child in node.ChildNodes)
foreach (var x in Walk(child))
yield return x;
}

...

foreach (var n in Walk(doc.DocumentNode).OfType<HtmlCommentNode>().ToArray())
n.Remove();

更简单(忘了我们可以使用 xpath 来查找评论节点)

    var doc = new HtmlDocument();
string html = @"
<!--[if gte mso 9]>
...
<![endif]-->

<body>
<span>
<!-- comment -->
</span>
<!-- another comment -->
</body>

<!--[if gte mso 10]>
...
<![endif]-->";
doc.LoadHtml(html);
foreach (var n in doc.DocumentNode.SelectNodes("//comment()") ?? new HtmlNodeCollection(doc.DocumentNode))
n.Remove();

关于c# - 如何使用 HTMLAgilityPack 选择 HtmlNodeType.Comment 的节点类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com