FizzlerEx / HtmlAgilityPack QuerySelectorAll이 작동하지 않습니다.

c# html-agility-pack

문제

나는 http://fizzlerex.codeplex.com/에있는 FizzlerEx를 설정하려고 시도 해왔다. 내 프로젝트에 대한 참조를 추가 한 후 웹 사이트에있는 예제 코드를 실행하려고 시도했습니다. 내 코드 전체가 아래에 나열되어 있습니다.

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 및 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?)

그래서 우리는 무엇을 얻습니까? 그것은라는있는 방법이 없다는 것을 우리에게 알려줍니다 QuerySelectorAll 클래스에 HtmlNode 네임 스페이스에 HtmlAgilityPack . 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는 합법적입니까? 예, 이유를 알아보십시오.