FizzlerEx / HtmlAgilityPack QuerySelectorAll無法正常工作

c# html-agility-pack

我一直在嘗試設置FizzlerEx,可以在http://fizzlerex.codeplex.com/找到。在添加對項目的引用之後,我試圖運行網站上給出的示例代碼 - 下面列出了我的全部代碼。

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;
            }
        }
}

但是,這會產生構建錯誤,聲稱:

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;
            }
        }
}

似乎QuerySelectorAll實際上並不是HtmlNode的一部分,但鑑於這是從網站上逐字逐句採用的官方示例代碼,我希望創建者能夠理解他們的庫是如何工作的。我不知道實際問題是什麼。

這裡似乎找到了一個相關的問題,但是找不到合適的答案: Fizzler和QuerySelectorAll

熱門答案

似乎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的源代碼,您可以輕鬆確定錯誤消息確實是正確的,因為在我們正在查找的類中沒有該名稱的方法。

HtmlAgilityPack.HtmlNode的源代碼 - 類

我們想要使用的這種方法在哪裡,卻找不到?

在這裡 ,在Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection -class中。

在嘗試了一些事情后,我讓代碼完全正常工作。問題是Fizzler和HAP源代碼之間的引用擴展。

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

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

清理您的解決方案並重建它,它應該工作!




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因