删除具有特定类名的整个div

时间:2016-03-18 17:51:08

标签: c# webbrowser-control xulrunner geckofx

是否可以删除具有特定类名的整个div?例如;

<body>
<div class="head">...</div>
<div class="container">...</div>
<div class="foot">...</div>
</body>

我想删除带有“容器”类的div。

C#代码示例非常有用,谢谢。

3 个答案:

答案 0 :(得分:1)

如果要在c#中解析html,最好的方法是使用Html敏捷包:

https://htmlagilitypack.codeplex.com/

HtmlDocument document = new HtmlDocument();  
document.Load(@"C:\yourfile.html")  

HtmlNode nodesToRemove= document .DocumentNode.SelectNodes("//div[@class='container']").ToList();  

foreach (var node in nodesToRemove)
    node.Remove();

答案 1 :(得分:1)

这样做的正确方法(我想)是通过内置的Gecko DOM类和方法。

所以,在你的情况下,如:

var containers = yourDocument.GetElementsByClassName("container");
//this returns an IEnumerable of elements with this class. If you only ever gonna have one, you can do it like that:
var yourContainer = containers.FirstOrDefault();
yourContainer.Parent.RemoveChild(yourContainer);

显然,你也可以做循环等。

答案 2 :(得分:0)

好吧,在正则表达式的帮助下,你可以删除你想要的div

var data = "<body>\n<div class=\"head\">...</div>\n" +
    "<div class=\"container\">...</div>\n" +
    "<div class=\"foot\">...</div>\n</body>";

var rxStr = "<div[^<]+class=([\"'])container\\1.*</div>";

var rx = new System.Text.RegularExpressions.Regex (rxStr, 
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);


var nStr = rx.Replace (data, "");

Console.WriteLine (nStr);

这会将你的字符串减少到

<body>
<div class="head">...</div>

<div class="foot">...</div>
</body>