HTML Linq与HtmlAgilityPack在PCL中的应用,或者其它替代方案

22

我使用了一个被广泛应用的库HtmlAgilityPack,它可以在HTML上进行Linq查询,并且仅使用其提供的LoadHtmlLinq接口。我已经将类库从.NET 4转换为PCL(Portable Class Library)并支持.NET 4和WP8,但是无法再使用HtmlAgilityPack库了。 是否有一种方法可以使HtmlAgilityPack在PCL项目下正常运行,或者是否有一种类似Linq接口的可替代方案可以正常工作?

编辑:HtmlAgilityPack提供了9个不同版本,但都不兼容PCL。这些版本没有解决依赖项引用问题。有些版本看起来可能会有所改善,但是在使用时会出现错误,提示“无法加载,未解析的依赖项”。

编辑#2:由于可能会忽略小注释,我将更新此答案,介绍我找到的解决方案。我提取了基本功能所需的内容,并实现了缺失的组件以使所有内容都可以工作。结果在这里:https://github.com/Deathspike/HtmlAgilityPack-PCL


“我似乎不能再使用HtmlAgilityPack库了。” - 什么让你这么说?你是否收到了特定的错误或信息? - Michael Paulukonis
HtmlAgilityPack有9个不同的版本,但是它们中没有一个解决来自引用的依赖关系。对于某些版本,可能会出现它可以解决依赖关系的情况,但在使用过程中会抛出通常的“无法加载、未解决的依赖项”错误。 - Deathspike
请更新您的问题并添加此信息。 - Michael Paulukonis
问题中的信息已更新。 - Deathspike
3个回答

5
一种选择是将 HTML Agility Pack 源代码移植到 PCL。您可以运行 PCL Compliance Analyzer 对其进行分析,以了解此操作的难度。
或者,使用抽象模式。为所需功能(即 LoadHtmlLinq)创建便携式接口,然后通过调用 HTML Agility Pack 来为每个平台实现该接口。然后,您的便携式代码可以依赖于特定于平台的实现。
有关更多信息,请参见此博客文章:如何使便携式类库对您起作用

4

你已经问了自己的问题,并且作出了回答 - 是吗?

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

最好的方法是考虑将您需要的特定功能移植/迁移,以便在您使用的平台上正常工作。


5
我在寻找一种替代方案,而不是基于HtmlAgilityPack构建自定义版本。对于那些感兴趣的人,现在可以在这里https://github.com/Deathspike/HtmlAgilityPack-PCL找到它。 - Deathspike

3
看看 HtmlParserSharp,这是一个C#移植自validator.nu HTML5解析器的项目。该项目应该很容易构建为PCL库,因为它几乎是对C++的直接移植,并且仅使用.NET框架中最基本的类,同时还进行了一些更新以提高在C#中的性能。
虽然我大部分使用HtmlParserSharp的工作都是为CsQuery做的,但它本身远未达到PCL兼容的地步,但绝不会影响HtmlParserSharp作为一个轻量级HTML解析器发挥作用。该项目包括一个基于XmlElement构建DOM的示例,但树构建器是一个抽象层,因此您可以轻松更改它以使用自己的树节点对象。

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