我有一个html文档,我想删除某些类的所有div(包含所有内容)。最简单的方法是什么?
感谢您的帮助。
更新:
我按照你的建议试用了Html Agility Pack,但是我未达到目标。 我有以下代码
static void Main()
{
HtmlDocument document = new HtmlDocument();
document.Load(FileName);
HtmlNode node = document.DocumentNode;
HandleNode(node);
}
private static void HandleNode(HtmlNode node)
{
while (node != null)
{
if (node.Name == "div")
{
var attribute = node.Attributes.Where(x => x.Name == "class" && x.Value == "NavContent");
if (attribute.Any())
node.Remove();
}
foreach (var childNode in node.ChildNodes)
{
HandleNode(childNode);
}
}
}
但它并不想要我想要的。递归永远不会结束,节点名称始终是注释。
这是我正在尝试解析的htmp文档:http://en.wiktionary.org/wiki/work
有一个很好的例子如何使用Html Agility Pack?
这段代码出了什么问题?
答案 0 :(得分:9)
这取决于how complex your HTML is,但您可能需要Agility Pack库。
HandleNode()包含while(node != null)
循环,但从不分配给节点。我会将其更改为if(...)
以开始。
答案 1 :(得分:2)
您正在寻找HTML Agility Pack。
答案 2 :(得分:2)
要解决您的问题,您可以使用LINQ:
foreach(var node in doc.DocumentNode
.Descendants("div")
.Where(d => d.GetAttributeValue("class", "").IndexOf("NavContent") >= 0)
.ToArray())
node.Remove();
答案 3 :(得分:0)
通常,我通过文件I / O和RegEx解决了这类问题(根据评论员尽职尽责地指出,完全不建议处理xml / html文档)。
那就是说,如果你想正确地做,我很确定C#中有一个DOM对象。
This one似乎支持XPath请求,这非常方便。