浅谈 AngleSharp 与 htmlagilitypack 的一些区别

AngleSharp 文档中的一些说法

The Html Agility Pack (HAP) is a good comparison target, since it is most used and established since a long time. Obviously AngleSharp is a great replacement for HAP due to the following reasons:
Standardized HTML5 parsing model
Much better error correction / handling
Also parses SVG / MathML elements correctly
Can handle CSS (selectors, rules, ...)
Better performance

我来说一些我实际中遇到的一些细节差异

htmlagilitypack 可以直接让它去 load stream 它会自动按照 ASCII 的规则去读取 <meta charSet="xxx">标签然后按正确的编码读取,anglesharp 我记得好像没这个功能,不过我也不敢确定,因为这方面我没用过,我一般都是拿 检测编码然后直接让各种 parser 去 load string,而不是用这些parser自带的编码检测。

htmlagilitypack 历史包袱很重,搞了一堆 flag 可以调整,我不是特别喜欢这些,感觉不是很透明。

AngleSharp 是完全按照标准来的,可以玩 CSS selector,想玩 xpath 也可以,htmlagilitypack 就只能 xpath 了。AngleSharp 甚至还可以用 jint 还可以拿来跑网页的 JavaScript(没搞过), 顺便吐槽一下我给jint提交的PR万年没人理。(划掉)

AngleSharp 如果再加上 AngleSharp.Css 可玩性就更大了,比如你可以用 Win2D 做一个简单的 HTML 文本显示,那么就可以用 anglesharp.css 去读取html element的style。不过如果你一个元素都去 ComputeCurrentStyle 的话,性能也确实不咋地。这方面我做了个小小的优化,有兴趣可以看看这个 yinyue200/AngleSharp.Css

AngleSharp 如果遇到不认识的标签不会认为标签是可以默认自闭合的,同时像title这样的标签也被 AngleSharp 被认为是不能自闭合。这也和目前的标准以及主流浏览器的实践相一致,但是和 htmlagilitypack 的处理方式是不一致的。如果有这方面的迁移需求的话我觉得需要注意这点。还有就是大小写处理方面二者略有不同,稍微注意一下即可。

posted @ 2020-08-18 06:25  yinyue200  阅读(395)  评论(0编辑  收藏  举报
知识共享许可协议
本博客原创内容默认采用知识共享署名 4.0 国际许可协议进行许可。