1

http://fizzlerex.codeplex.com/にある FizzlerEx をセットアップしようとしています。プロジェクトへの参照を追加した後、Web サイトにあるサンプル コードを実行しようとしました。コード全体を以下に示します。

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 の一部ではないように見えますが、これが Web サイトからそのまま引用された公式のサンプル コードであることを考えると、作成者はライブラリがどのように機能するかを理解していると思います。実際の問題が何であるかについて、私は途方に暮れています。

関連する問題がここで見つかったようですが、適切な答えは見つかりませんでした: Fizzler および QuerySelectorAll

4

2 に答える 2

4

QuerySelectorAll は実際には HtmlNode の一部ではないように見えますが、これが Web サイトからそのまま引用された公式のサンプル コードであることを考えると、作成者はライブラリの仕組みを理解していると思います。実際の問題が何であるかについて、私は途方に暮れています。

あなたはこの部分について正しいです。HAP の作成者は FizzlerEx の作成者ではないため、2 番目の部分については正しくありません。問題は別のところにあります。エラーを見るだけで、これを解決するために必要な唯一の手がかりが得られます。

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のクラスで呼び出されたメソッドがないことがわかります。HAP のソース コードを見ると、エラー メッセージが実際に正しいことを簡単に判断できます。これは、探しているクラスにその名前のメソッドがないためです。HtmlNodeHtmlAgilityPack

HtmlAgilityPack.HtmlNode - クラスのソース コード

使用したいのに見つからないこのメソッドはどこにありますか?

それはここにある、Fizzler.Systems.HtmlAgilityPack.HtmlNodeSelection- クラスで。

いくつかのことを試した後、コードがそのまま完全に機能するようになりました。問題は、Fizzler と HAP のソース コード間の参照の拡張機能でした。

Fizzler をダウンロードすると、HtmlAgilityPack も同時に取得されます。Visual Studio で参照を追加する場合 (それを使用すると仮定)、追加するだけです。

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

ソリューションをきれいにして再構築すると、うまくいくはずです!

于 2013-10-17T19:47:18.053 に答える
2

参照を右クリックして Fizzler を追加する必要があります -> Nuget パッケージを管理し、オンラインで検索すると、HtmlAgilityPack の Fizzler として見つかり、ダウンロードできます。

于 2015-03-18T21:00:57.617 に答える