2012-06-04 93 views
4

我發現Fizzler作爲html解析器和jQuery之類的選擇器。但似乎視覺工作室不能解決QuerySelectorAll方法。Fizzler和QuerySelectorAll

這裏是我的代碼:

using HtmlAgilityPack; 
HtmlAgilityPack.HtmlWeb web = new HtmlWeb(); 
HtmlAgilityPack.HtmlDocument document = web.Load(url); 
var c = document.QuerySelectorAll('div'); 

我錯過任何引用?

編輯:後 一些搜索,我發現這個代碼使用Fizzler

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(html); 
const string search = "td"; 
SelectorGenerator<HtmlNode> selectorGenerator1 = new SelectorGenerator<HtmlNode>(new HtmlNodeOps()); 
HumanReadableSelectorGenerator selectorGenerator2 = new HumanReadableSelectorGenerator(); 
Parser.Parse(search, new SelectorGeneratorTee(selectorGenerator1, selectorGenerator2)); 
var c = selectorGenerator1.Selector(Enumerable.Repeat(doc.DocumentNode, 1)).ToList(); 

我還在找找到我的問題很好的答案。

+0

@IanNewson,'QuerySelectorAll'將'XmlNode'作爲靜態參數,但'document.DocumentNode'的'type'是'HtmlNode' !!!! – Mironline

回答

4

這大概:

using Fizzler.Systems.HtmlAgilityPack; 

也給了一槍CsQuery,我的C#的jQuery端口:https://github.com/jamietre/CsQuery

var dom = CQ.CreateFromUrl(url); 
var c = dom["div"]; 

..再加上你是從使用jQuery的一切。

2

老問題,但工作原理:

using HtmlAgilityPack; 
using Fizzler.Systems.HtmlAgilityPack; 

var web = new HtmlWeb(); 
var document = web.Load("some-url"); 
var c = document.DocumentNode.QuerySelectorAll("div"); 

QuerySelectorAll對於HtmlNode類型的擴展方法,但你嘗試使用它在HtmlDocument

0

如果使用QuerySelectorAll你應該創造一個數組來檢查,如果格不爲空,然後你可以使用queryselector

HtmlNode[] test= html.DocumentNode.QuerySelectorAll("div.hlogo").ToArray(); 
     for (int rowcounter = 0; rowcounter < test.Count(); rowcounter++) 
     { 
     var logoname = test[rowcounter].QuerySelector("a").InnerText;  
     } 
1

你最有可能丟失參考Fizzler.Systems.HtmlAgilityPack

我會建議增加此的NuGet包。 Fizzler

using Fizzler.Systems.HtmlAgilityPack; 
using HtmlAgilityPack;  
using HtmlDoc = HtmlAgilityPack.HtmlDocument; 

,然後你可以使用它像

var html = new HtmlDoc(); 
html.LoadHtml(HtmlText); 

// Fizzler for HtmlAgilityPack is implemented as the 
// QuerySelectorAll extension method on HtmlNode 

var document = html.DocumentNode; 

// yields: [<p class="content">Fizzler</p>] 
document.QuerySelectorAll(".content"); 
0

我有同樣的問題,解決它。也許你犯了同樣的錯誤。我在幾個配置文件中定義了程序集。當我刪除所有並重新安裝軟件包時,一直運行良好。

  • 在nuget manager中卸載Fizzler,Fizzler.Systems.HtmlAgilityPack
  • 從bin和debug文件夾中刪除所有這些dll。
  • 刪除所有依賴組件,其有關這些DLL中的AppConfig和webconfig
  • 在管理的NuGet包FizzlerFizzler.Systems.HtmlAgilityPack包最後一個版本安裝。

    之後,你可以使用QuerySelectorAll和其他方法,無論你想要的地方沒有錯誤。

請勿僅自行安裝HtmlAgilityPack。當您安裝Fizzler時,HtmlAgilityPack將自動安裝。

相關問題