HTML Linq与HtmlAgilityPack,或替代品,在PCL

本文关键字:替代品 PCL HTML HtmlAgilityPack Linq | 更新日期: 2023-09-27 18:03:16

我已经在。net 4上写了一个项目,目前正在允许它在Windows Phone上运行。我正在使用HtmlAgilityPack,这是一个著名的库,允许在HTML上进行Linq查询,我只使用它提供的LoadHtmlLinq接口。

将类库从。net 4转换为支持。net 4和WP8的PCL(可移植类库)后,我似乎再也不能使用htmllagilitypack库了。是否有一种方法允许HtmlAgilityPack在PCL项目下正确工作,或者是否有一个类似Linq接口的变量替代方案,按预期工作?

EDIT: htmllagilitypack提供了9个不同的版本,其中没有一个与PCL兼容。它们都不能从引用中解析依赖关系。对于某些版本,它可能看起来是这样,但在使用时将抛出一个错误,通常是'无法加载,未解析的依赖项'。

EDIT #2由于很容易遗漏一个小评论,我将用我想到的解决方案更新这个答案。我提取了基本功能所需的内容,并实现了缺失的组件以使一切正常工作。结果如下https://github.com/Deathspike/HtmlAgilityPack-PCL

HTML Linq与HtmlAgilityPack,或替代品,在PCL

一种选择是将HTML Agility Pack源代码移植到PCL上。您可以在上面运行PCL Compliance Analyzer,以了解这将有多困难。

或者,使用抽象模式。为你需要的功能创建一个可移植的接口(如LoadHtmlLinq),然后通过调用HTML敏捷包为每个平台实现该接口。然后,您的可移植代码可以依赖于特定于平台的实现。

有关更多信息,请参阅这篇博客文章:如何使可移植类库为您工作

你已经问过并回答过你自己的问题了,不是吗?

HtmlAgilityPack不支持与可移植类库一起使用

最好的情况下,你需要考虑移植/迁移你所需要的特定功能,以一种能够在你正在使用的平台上工作的方式。

看看HtmlParserSharp,这是验证器的c#移植。HTML5解析器。作为一个PCL库,这个项目应该非常容易构建,因为它或多或少是一个直接的c++移植,只使用最基本的。net框架类,通过一些更新来提高c#的性能。

虽然我用HtmlParserSharp做的大部分工作都是为CsQuery做的,它本身离PCL兼容还有很长的路要走,但没有理由认为HtmlParserSharp不能很好地作为一个精益的HTML解析器来满足你的目的。该项目包括一个基于XmlElement构建DOM的示例,但是树构建器是一个抽象,因此您可以轻松地将其更改为使用自己的树节点对象。