2

Dot Net 世界中是否存在任何类似 jQuery 的 html 元素选择器库?我正在构建一个涉及大量 html 解析的应用程序。

假设我想枚举所有 'href' 和 'src' 里面只有一个选定的 'div' 的 id 像“post_message_%”。或者说想要在具有特定 id 或输入类型(例如隐藏或单选)的表单中选择名称和值字符串

我可以编写代码..但首先寻找任何现有的解决方案,以便我可以使用它并节省我的时间做其他事情。

4

2 回答 2

6

游戏有点晚了,但这是另一种选择。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对象中的简写形式。

于 2012-09-13T20:33:22.663 回答
5

您应该查看 Html Agility 包,可在此处获得。这是他们网站上的一个用例,它使用 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");
于 2012-05-05T13:46:43.690 回答