Dot Net世界中是否存在类似jQuery的html元素选择器库?我正在构建一个涉及大量html解析的应用程序。
假设我想枚举所有'href'和'src只在一个选定的'div'中,其id为“post_message_%”。 或者说想要在具有特定id或输入类型的表单中选择名称和值字符串(例如,隐藏或无线电)
我可以编写代码..但首先要寻找任何现有的解决方案,以便我可以使用它并节省我的时间用于其他事情。
答案 0 :(得分:4)
您应该查看Html Agility包,可用here。 这是他们网站上的一个使用XPATH选择器的用例:
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
HtmlAttribute att = link["href"];
att.Value = FixLink(att);
}
doc.Save("file.htm");
答案 1 :(得分:4)
游戏稍晚,但这是另一种选择。 CsQuery是.NET4中jQuery的完整端口。它在NuGet上为CsQuery
。它稳定且功能齐全,包括所有CSS3选择器和DOM操作方法。它也是完全索引的,使得选择器比HTML Agility Pack快几个数量级。
语法如下(上面的复制示例)
CQ doc = CQ.CreateFromFile("file.htm");
foreach (IDomObject link in doc["a"]) {
var attr = link["href"];
link["href"] = FixLink(attr);
}
CQ
对象的属性索引器语法与运行选择器的默认jQuery方法相同,例如$('a')
。在DomObject
(元素)上,它返回属性值。
除了CSS选择器之外,CsQuery还实现了所有jQuery方法,因此你可以这样做:
doc.Each((i,e)=> {
var el = CQ.Create(e); // or shorthand: var el = e.Cq()
el.Attr("href",FixLink(el.Attr("href"))
});
语法e.Cq()
是在jQuery对象中包装元素的C#版本,如var el = $(e)
。由于$语法的值很简单,并且无法在C#中创建默认静态方法,因此提供了元素上的方法Cq()
作为简写来将元素包装在CQ
对象中。