HtmlAgilityPack和Windows 8 Metro应用程序

4

我正在尝试让HtmlAgilityPack与Windows 8 Metro应用程序(Windows Store应用程序)一起使用。我已经成功编写了所有必要的代码,用于Windows Console应用程序(C#),并且它能够完美地解析我需要的HTML并返回所需的字符串。

// Create a new HtmlDocument and load the incoming string
        HtmlDocument menu = new HtmlDocument();
        menu.OptionUseIdAttribute = true;
        menu.LoadHtml(response);

        HtmlNode nameToRemove = menu.DocumentNode.SelectSingleNode("//*[@id=\"maincontent_0_contentplaceholder_0_lblHall\"]");

我的问题出在DocumentNode.SelectSingleNode调用上。我收到以下错误信息:

错误 2 'HtmlAgilityPack.HtmlNode'不包含定义为'SelectSingleNode'的内容,没有接受类型为'HtmlAgilityPack.HtmlNode'的第一个参数的扩展方法'SelectSingleNode'被找到(你是否缺少using指令或程序集引用?)

我确认我已经完全按照控制台应用程序中的方式设置了所有引用,但是无法使其工作。根据HtmlAgilityPack的Twitter账户,在版本1.4.5中添加了对Windows 8 Metro/Windows Phone 8的支持。我重新检查了我的NuGet包管理器,并确认我已安装了1.4.6。
在Windows 8应用程序中,选择通过XPath在HtmlDocument中选择节点时有需要特别注意的地方吗?如果有任何建议,将不胜感激。
谢谢!
编辑:是否有人能帮助我使用Linq查询获得相同的结果呢?我不确定该如何做。

有人能帮我用Linq查询获得相同的结果吗?我不确定该怎么做。 - Rohan Kapoor
1个回答

10

Html Agility Pack依赖于.NET进行XPATH实现。不幸的是,WinRT不支持XPATH,因此在Html Agility Pack for WinRT中与XPATH相关的内容都不存在。


1
如果HtmlAgilityPack声称支持Windows 8 Metro(即.NET WinRT配置文件),那么这个答案是正确的,这很奇怪。我猜测该项目实际上并不支持Windows 8(Windows Store)应用程序,尽管它声称支持。我实际上在项目网站上没有看到这个声明... - Security Hound
1
它确实支持WinRT,但您将不得不使用除XPATH之外的其他方法,例如Linq、Descendants等... - Simon Mourier
我觉得我脑子抽了,我一直将WinRT读成Windows RT,而不是WinRT .NET档案(尽管我在想着它)。 - Security Hound
你能带我走一遍使用Linq和Descendants编写查询的过程吗? - Rohan Kapoor
至少我知道这不是我的失误。使用LINQ也不是什么负担。Simon,我无法感谢你足够的解除了HTML解析的可怕负担。为HAP写作+1。如果没有人告诉过你,Nuget会出错,你必须删除对sl4的引用并改用sl3二进制文件。 - Peter Wone

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