使用HtmlAgilityPack汇编错误

c# html-agility-pack reference windows-phone-8.1 xpath

我想创建一个应用程序,它从网页中获取某些内容并将其显示给用户。为了做这件事,我使用了HtmlAgilityPack。我添加了对项目的引用(来自NuGet的v.1.4.6.0),并且我使用了几年前用户在另一个问题中发布的代码。

            HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
            // There are various options, set as needed
            htmlDoc.OptionFixNestedTags = true;

            // filePath is a path to a file containing the html
            htmlDoc.Load(filePath);
            if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
            {
                // Handle any parse errors as required
            }
            else
            {
                if (htmlDoc.DocumentNode != null)
                {
                    HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

                    if (bodyNode != null)
                    {
                        // Do something with bodyNode
                    }
                }
            }

我的问题是我收到以下错误:

“System.Xml.XPath.IXPathNavigable”类型在未引用的程序集中定义。您必须添加对程序集'System.Xml.XPath,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'的引用。

所以我尝试使用以下dll添加引用:

c:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v5.0 \ Libraries \ Client \ System.Xml.XPath.dll

但这次我得到以下错误(我翻译它因为我得到意大利语错误,所以它可能不是正确的翻译):

无法将程序集的引用添加到不兼容或上述版本的项目中

我能做什么?

热门答案

似乎用于Windows Phone 8.1商店应用程序的HtmlAgilityPack(HAP)不支持XPath,类似于Windows 8商店应用程序的HAP

在这种情况下,您可以使用HAP的LINQ API而不是XPath API,例如:

......
if (htmlDoc.DocumentNode != null)
{
    HtmlAgilityPack.HtmlNode bodyNode = doc.DocumentNode
                                           .DescendantsAndSelf("body")
                                           .FirstOrDefault();
    if (bodyNode != null)
    {
        // Do something with bodyNode
    }
}
......

即使您实际拥有Windows Phone Silverlight应用程序项目,LINQ API仍然是一种可能的解决方法。



Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow