2011-03-05 50 views
1

我試圖從URL(谷歌財經)分析如下XPATH如何從HTML中的tbody的時間使用HTML敏捷性包

http://www.google.com/finance/historical?q=BOM:533278 

我想只提取表中提取一個TD 關閉值在關閉列。但是,當我與XPATH

hd.DocumentNode.SelectSingleNode("//td[@class='rgt']") 

嘗試我得到一個其屬性爲類和屬性作爲RGT的價值Node.innerText本身的所有節點。

我需要一個一個的值,而不是全部在同一時間。我必須在這裏做一些愚蠢的事情。謝謝。

使用Firebug發現實際的XPath是如下

/html/body/div/div/div[3]/div[2]/div/div[2] 
    /div[2]/div/form/div[2]/table/tbody/tr[2]/td[5] 

但一些如何形成的標記之後...... HTMLagility包返回null節點。從來沒有想過這會花很長時間來實施。

+0

這是一個** FAQ:瀏覽器向DOM **添加必需的元素(如'head'和'tbody')。你的輸入源沒有任何'tbody'元素。 – 2011-03-06 21:12:50

回答

2

如果您使用螢火蟲或任何的Firefox擴展(如XPather)要獲得需要解析的元素的XPath,您可能需要從XPath中刪除tbody標籤。

看看下面的答案在這裏這樣:Why does firebug add <tbody> to <table>?

如果您使用HtmlAgilityPack,通過螢火蟲或用火狐相關的任何其他工具可能會有所不同返回XPath,因爲您正在解析的HTML源可能與Firefox中的HTML源不同。

有時可能是Internet Explorer 8中打開同一個頁面,並使用開發工具(F12)做你與螢火蟲做同樣的,如果還是不行,請使用類似HAP瀏覽器另一個有用的工具可以從HtmlAgilityPack page下載

0

Close列中第一個單元格的XPath爲//div[@id='prices']/table/tbody/tr[2]/td[5],第二個爲//div[@id='prices']/table/tbody/tr[3]/td[5]等等。

+0

HtmlNode node = hd.DocumentNode.SelectSingleNode(「// div [@ id ='prices']/table/tbody/tr [3]/td [5]」); - 這不工作...我仍然得到空引用 – 2011-03-06 04:41:36

0

有很多方法可以做到這一點。這裏是一個解決方案,它是基於數據TD(一個枝條的「LM」級):

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

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@class='lm']/../td[5]")) 
{ 
    Console.WriteLine("node=" + node.InnerText); 
}