나는 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에서 참조를 추가 할 때 (사용한다고 가정 할 때)
솔루션을 청소하고 다시 작성하면 제대로 작동합니다!