在DotNet世界中是否存在類似jQuery的html元素選擇器庫?我正在構建一個涉及大量html解析的應用程序。HTML選擇器庫
假設我想枚舉所有'href和'src的內部只有一個選定的'div的ID爲「post_message_%」的ID。 或者說要選擇具有特定ID或輸入類型(如隱藏或無線電)的表格中的名稱和值字符串
我可以編寫代碼..但首先尋找任何現有的解決方案,以便我可以使用它,並節省我的時間去做其他事情。
在DotNet世界中是否存在類似jQuery的html元素選擇器庫?我正在構建一個涉及大量html解析的應用程序。HTML選擇器庫
假設我想枚舉所有'href和'src的內部只有一個選定的'div的ID爲「post_message_%」的ID。 或者說要選擇具有特定ID或輸入類型(如隱藏或無線電)的表格中的名稱和值字符串
我可以編寫代碼..但首先尋找任何現有的解決方案,以便我可以使用它,並節省我的時間去做其他事情。
你應該看看Html Agility包,可用here。 下面是從他們的網站的使用情況,使用XPath選擇:
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
HtmlAttribute att = link["href"];
att.Value = FixLink(att);
}
doc.Save("file.htm");
敏捷包,是的,我聽到這個名字。感謝您的快速回復,我現在檢查...歡迎任何更多的建議... –
@PrasenjitChatterjee,我已經研究了大約一個月前的事情,HtmlAgilityPack是最好的選擇,我坦率地沒有就像BeautifulSoup一樣,這很遺憾只能用於Python。我不確定它是否適用於IronPython,但如果你有時間檢查一下。 – Gleno
謝謝,我之前使用過python,並熟悉語法和風格......但主要是我在3.x版本上工作......不幸的是,所有這些庫仍然使用2.x版本......但我一定會牢記它如果可能在我的產品的後期版本中,我會加入它。 –
有點太遲了,但這裏的另一種選擇。 CsQuery是.NET4中完整的jQuery端口。它在NuGet上爲CsQuery
。它穩定且功能完整,包括所有CSS3選擇器和DOM操作方法。它也被完全索引,使得選擇器的數量級比HTML敏捷包快幾個數量級。
的語法如下所示(複製上面的例子)
CQ doc = CQ.CreateFromFile("file.htm");
foreach (IDomObject link in doc["a"]) {
var attr = link["href"];
link["href"] = FixLink(attr);
}
用於CQ
對象的屬性索引語法是相同的作爲默認的jQuery方法運行的選擇器,例如$('a')
。在DomObject
(一個元素)它返回屬性值。
除了CSS選擇器,CsQuery也實現了所有的jQuery方法,所以你可以這樣做的:
doc.Each((i,e)=> {
var el = CQ.Create(e); // or shorthand: var el = e.Cq()
el.Attr("href",FixLink(el.Attr("href"))
});
語法e.Cq()
是一個jQuery對象包裝的元素,像var el = $(e)
的C#版本。由於$語法的值是簡潔的,並且無法在C#中創建默認靜態方法,因此元素上的方法Cq()
以簡寫形式提供以包裝CQ
對象中的元素。
有HTML敏捷包或Sgml讀者。您可以使用XPath查詢語法。 –