無法讓XPATH使用Html Agility Pack

.net c# html-agility-pack xpath

我試圖通過使用firebug獲取XPATH值來刮取維基百科上的“今日精選文章”。

在此處輸入圖像描述

然後將其粘貼到我的代碼中:

string result = wc.DownloadString("http://en.wikipedia.org/wiki/Main_Page");

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(result);

            var featuredArticle = doc.DocumentNode.SelectSingleNode("/html/body/div[3]/div[3]/div[4]/table[2]/tbody/tr/td/table/tbody/tr[2]/td/div/p");

但是,featuredArticle始終返回null。我究竟做錯了什麼?

熱門答案

因為Firebug顯示像Firefox這樣的XPath製作了Html,這可能是也可能不是服務器的Html。此外,Firebug的路徑是絕對的,每一個小小的變化都可以打破它。

更簡單的方法是只看Html,你正在尋找的p-Tag是一個帶有id mp-tfa的div,所以更容易讓XPath找到div而只是得到第一個p裡面。

喜歡這個:

var wc = new WebClient();
var doc = new HtmlDocument();
doc.Load(wc.OpenRead("http://en.wikipedia.org/wiki/Main_Page"));
var featuredArticle = doc.DocumentNode.SelectSingleNode("//div[@id='mp-tfa']/p");
Console.WriteLine(featuredArticle.InnerText);

學習如何使用XPath的最佳地點是w3schools.com

或者你可以使用Linq,雖然我覺得XPath有點清楚。

var featuredArticle=   doc.DocumentNode.Descendants("div")
 .First(n => n.Id == "mp-tfa")
 .Descendants("p").FirstOrDefault();



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因