我想创建一个应用程序,它从网页中获取某些内容并将其显示给用户。为了做这件事,我使用了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
但是这次我得到以下错误(我翻译它是因为我收到意大利语错误,所以它可能不是正确的翻译):
无法将对程序集的引用添加到项目中 不兼容或不符合上述版本
我该怎么办?
答案 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仍然是一种可行的解决方法。