使用HtmlAgilityPack汇编错误

时间:2014-07-21 13:17:19

标签: c# xpath reference html-agility-pack windows-phone-8.1

我想创建一个应用程序,它从网页中获取某些内容并将其显示给用户。为了做这件事,我使用了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,   公钥= 31bf3856ad364e35'

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

  

c:\ Program Files(x86)\ Microsoft   的SDK \ Silverlight的\ V5.0 \库\客户端\ System.Xml.XPath.dll

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

  

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

我该怎么办?

1 个答案:

答案 0 :(得分:0)

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

在这种情况下,您可以使用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仍然是一种可行的解决方法。