2013-10-16 53 views
1

我一直試圖設置FizzlerEx,發現在http://fizzlerex.codeplex.com/。添加引用到我的項目後,我試圖運行網站上給出的示例代碼 - 我的代碼的全部內容在下面列出。FizzlerEx/HtmlAgilityPack QuerySelectorAll不工作

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using HtmlAgilityPack; 
using Fizzler.Systems.HtmlAgilityPack; 


namespace Fizzler_Test 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
     var web = new HtmlWeb(); 
      var document = web.Load("http://example.com/page.html"); 
      var page = document.DocumentNode; 

      foreach (var item in page.QuerySelectorAll("div.item")) 
      { 
       var title = item.QuerySelector("h3:not(.share)").InnerText; 
       var date = DateTime.Parse(item.QuerySelector("span:eq(2)").InnerText); 
       var description = item.QuerySelector("span:has(b)").InnerHtml; 
      } 
     } 
} 

然而,這種收益率構建錯誤,聲稱:

Error 1 'HtmlAgilityPack.HtmlNode' does not contain a definition for 'QuerySelectorAll' and no extension method 'QuerySelectorAll' accepting a first argument of type 'HtmlAgilityPack.HtmlNode' could be found (are you missing a using directive or an assembly reference?) 

這似乎是QuerySelectorAll實際上不是HtmlNode的一部分,但考慮到這是從逐字官方示例代碼網站,我希望創作者瞭解他們的圖書館是如何工作的。我對於實際問題可能會產生困惑。

一個相關的問題似乎已經在這裏找到,但沒有合適的答案被發現了:Fizzler and QuerySelectorAll

回答

2

這似乎是QuerySelectorAll實際上不是HtmlNode的一部分,但鑑於這是官方示例代碼從網站逐字記錄 ,我希望創作者瞭解他們的圖書館是如何工作的 。我不知道實際問題 是什麼。

您對此部件無誤。雖然你對第二部分不正確,但是HAP的作者並不是FizzlerEx的作者。問題在別處。 只需查看錯誤,就可以得到解決此問題所需的唯一線索。

Error 1 'HtmlAgilityPack.HtmlNode' does not contain a definition for 'QuerySelectorAll' and no extension method 'QuerySelectorAll' accepting a first argument of type 'HtmlAgilityPack.HtmlNode' could be found (are you missing a using directive or an assembly reference?) 

那麼,我們得到什麼;它告訴我們在命名空間HtmlAgilityPack的類HtmlNode中沒有稱爲QuerySelectorAll的方法。如果我們查看HAP的源代碼,可以很容易地確定錯誤消息的確是正確的,因爲我們正在查找的類中沒有該名稱的方法。

Source code for HtmlAgilityPack.HtmlNode - class

哪裏是這種方法,我們想用,但不能找到?

這是here,在Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection-類。

在嘗試了幾件事情之後,我得到了完美的代碼。問題在於Fizzler和HAP源代碼之間的參考擴展。

如果您下載Fizzler,您可以同時獲得HtmlAgilityPack。當您添加在Visual Studio中引用(假設你使用),只添加

  • Fizzler.Systems.HtmlAgilityPack.dll
  • HtmlAgilityPack.dll

清潔您的解決方案,並重建它,它應該管用!

+0

我正在使用此答案來擺脫我得到的錯誤。只引用上面指定的2個DLL刪除了「找不到」的錯誤。但是在運行時會發生不同的錯誤。由於沒有實現的方法,QuerySelectorAll拋出一個異常。 我發現我需要引用「Fizzler.dll」和「HtmlAgilityPack.dll」。它不適用於「Fizzler.Systems.HtmlAgilityPack.dll」和「HtmlAgilityPack.dll」。 –

+0

也許你可以使用其他版本? –

+0

我正在使用最新的FizzlerEx版本2012年6月19日穩定版本。我不明白爲什麼有人會在2013年使用不同的版本。 –

1

您應該通過右鍵單擊引用 - >管理Nuget包並在線搜索它來添加Fizzler,您會發現它爲Fizzler for HtmlAgilityPack,然後可以下載它。