HtmlAgilityPack的替代品是什么?

18

我不喜欢HtmlAgilityPack中的一些设计决策:

  • 使用SelectNodes时,如果没有找到节点,它会返回null而不是空集合,因此您不能只是在其上进行foreach循环而不进行null检查。
  • 尝试使用node.SelectNodes选择子节点时,实际上会从文档根部开始搜索,除非您使用descendant::,这不是明显或预期的行为,我认为。
  • HtmlDocument.Load不返回根节点,这是您99%的时间想要的结果,我认为。

当然,您可能不同意这个观点,但这不是重点。我正在寻找一些“不同”的东西。一些行为更符合预期的,或者使用jQuery语法的东西会更好。有什么建议吗?


1
对于您提供的示例,将其行为更改为所需的行为应该相当容易。由于HtmlAgilityPack是开源的,您是否考虑过获取本地分支并进行这些更改? - Adam Ralph
目前,我只是用自己的函数封装了它,但还是希望能找到更符合我的理念的工具。我只是偶尔在小项目中尝试一下HTML解析,所以我不认为把它改成我认为应该的样子是值得花费我的时间的。 - mpen
希望这个能对你有用,http://code.google.com/p/fizzler/。 - user1134466
1
CsQuery是.NET 4的jQuery端口。 - hjdm
2个回答

4

开始了名为SharpQuery的项目。

目前支持ID、class、tag和attribute选择器。

a
a[href]
a[href^=http://stackoverflow.com]
.class
#id

更新:很抱歉,我不再维护这个项目。 CsQuery 有最近的更新(截至2013年7月),但我没有使用过它的经验。


1
我很久以前就投票支持SharpQuery + HTMLAgilityPack合并。因为HTML解析器和DOM结构应该与查询引擎有明显的区别...此外,HTMLAgilityPack支持多种查询方法 - XPath、LINQ和DOM遍历。在此基础上使用SharpQuery将会非常棒。 - CVertex
哦,等等,你刚开始那个项目吗?我建议加入一个与SharpQuery完全相同的不同项目...让我找找。 - CVertex
1
找到了 - http://code.google.com/p/fizzler/ 这是我的合并请求 http://htmlagilitypack.codeplex.com/Thread/View.aspx?ThreadId=76383 - CVertex
@CVertex:在我开始这个项目之前,你本可以提到Fizzler的:p 我刚刚添加了一个很棒的正则选择器 a[href %= /caseInsensitive/i] - mpen
无论如何,SharpQuery只是一组作用于 IEnumerable<HtmlNode> 的扩展方法,所以它应该与 HtmlAgilityPack 很好地配合使用。如果我能弄清楚的话,可能会将其基于 IXPathNavigable 进行设置...然后它就应该可以与任何XML文档一起使用了。 - mpen

2

如果您只是解析html,另一个选项可能是SgmlReader。如果您要修改html,则不太适用。我不记得它在处理您提出的问题方面的表现如何,但值得一试。


就我所知,该库仅将格式不正确的HTML转换为有效的HTML...它并未涉及xpath /查询/遍历DOM树。我不需要修改文档,但我确实需要查询它。 - mpen
4
它将内容转换为有效的XML格式,形成一个XmlDocument。然后,您可以调用XmlDocument.CreateNavigator()中的一个重载方法,获取XPathNavigator对象以执行XPath查询。 - aciemian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接