2013-03-03 80 views
4

现在我正在使用HtmlAgilityPack寻找与CSS选择器的C#Html解析器

但很难通过Xpath进行选择。在Java中我知道Jsoup。有没有.net库也可以做到这一点?

解析Html并使用CSS样式的裁剪器查找元素。

+0

什么是使用XPath的问题,你有一个例子吗? – Trisped 2013-03-03 21:07:53

+0

应该被关闭为http://stackoverflow.com/questions/1580635/is-there-a-jquery-like-css-html-selector-that-c​​an-be-used-in-c,而不是关闭-topic – 2017-01-20 00:36:43

回答

4

尝试Fizzler与HtmlAgilityPack。

Fizzler是:

一个.NET库选择基于CSS选择一个节点树项目。 默认实现基于HTMLAgilityPack并从HTML文档中进行选择。从项目网站

例子:

// Load the document using HTMLAgilityPack as normal 
var html = new HtmlDocument(); 
html.LoadHtml(@" 
    <html> 
     <head></head> 
     <body> 
     <div> 
      <p class='content'>Fizzler</p> 
      <p>CSS Selector Engine</p></div> 
     </body> 
    </html>"); 

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

var document = htmlDocument.DocumentNode; 

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

// yields: [<p class="content">Fizzler</p>,<p>CSS Selector Engine</p>] 
document.QuerySelectorAll("p"); 

// yields empty sequence 
document.QuerySelectorAll("body>p"); 

// yields [<p class="content">Fizzler</p>,<p>CSS Selector Engine</p>] 
document.QuerySelectorAll("body p"); 

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

与CSQuery的100%CSS2和CSS3相比,FIzzler并没有得到充分利用(自09年7月以来没有更新),并且仅部分实现了CSS3。 CsQuery也索引文档,比Fizzler + HAP快得多。 – 2013-03-04 06:58:28

+1

由于缺陷的数量,我不会推荐csQuery – tic 2015-07-30 04:34:25

2

你可以试试这个库,它看起来非常有前途我。 我没有亲自尝试,所以如果你试试图书馆,也许你想和我们分享你的经验。

库:CsQuery 网站:https://github.com/jamietre/CsQuery 样品:

// get all elements that are first children within 'body' (e.g. excluding 'head') 
var childSpans = dom["body"].Find(":first-child"); 
+0

我不会推荐这个,因为它在继承方面有一些很大的问题。例如,你想要'.myclass [无论]'的父亲的第二个孩子......它会失败。 – HellBaby 2015-05-22 16:18:12

+0

我不会推荐它。它有非常糟糕的错误,但从未被修复过。我已经在问题跟踪器中发布了2个错误(它错误地匹配了相邻的相同元素,而text()也包含了注释) – tic 2015-07-30 04:33:31