2013-01-08 29 views
0

我在使用Chrome提供給我的一些XPath時出現問題。 我正在嘗試使用的示例是http://magic.tcgplayer.com/db/magic_single_card.asp?cn=Jace,%20Memory%20AdeptHTML敏捷中的XPath用法

我試圖用頁面頂部的藍色背景來隔離價格。 鉻說,XPath是

//*[="inputForm"]/table[1]/tbody/tr[1]/td/div/table/tbody/tr/td[5]/center/b 

,並基於該我試圖這樣做是爲了創建具有價格金額的字符串:

var baseNode = document.DocumentNode.SelectSingleNode("//*[=\"inputForm\"]//table[1]//tbody//tr[1]//td//div//table//tbody//tr//td[5]//center//b"); 
String price = baseNode.InnerText; 

與消息

崩潰

未將對象引用設置爲對象的實例。

我不知道該做什麼,我可以使用一些幫助。 謝謝!

+1

這意味着'basenode'是null..xpath可能是錯誤的 – Anirudha

回答

0

大多數情況下,你不能不能採用瀏覽器調試工具(Chrome,FF等)提供的XPATH,並在Html Agility Pack等工具中使用它。

原因是瀏覽器爲您提供了內存中元素的XPATH,而Html Agility Pack將從源HTML流中看到XPATH。

兩個XPATHs表達式之間差異最常見的情況是由瀏覽器添加的元素;例如TBODY。 TBODY很少在HTML文件中定義,但總是由瀏覽器添加。所以你可以試試這個:

//*[="inputForm"]/table[1]/tr[1]/td/div/table/tr/td[5]/center/b 

但我當然不能保證它的工作。最好是有在HTML源代碼的人看,並拿出一個很好的判別(和將來的寬容)XPATH表達式,像這樣的例子:

//myElement[@class='someclass'] 

含義「找哪家都‘myElement’標籤一個「類」與「SomeClass的」爲屬性的值

我們可以幫助更多的HTML源,哪些是你想在單元

編輯:。得到的價格顯示爲藍色你給的網址,如果你快速瀏覽一下,你會發現判別式正是結腸R,所以你可以想像一個XPATH這樣的:

//td[@bgcolor='#D1DFFC']//b 

至極的意思是:

  1. 從根(/)
  2. 文檔中遞歸得到任何TD元素(雙/手段遞歸)具有值等於'#D1DFFC'的BGCOLOR屬性
  3. 從該TD中遞歸地查找並搜索B元素。

因此,一個C#代碼:

 HtmlDocument doc = new HtmlDocument(); 
     doc.Load(yourHtmlFile); 

     foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@bgcolor='#D1DFFC']//b")) 
     { 
      Console.WriteLine(node.InnerHtml); 
     } 

將顯示

$17.91 
+0

怪異。第一句中的「這裏」應該是頁面的鏈接。 這是http://magic.tcgplayer.com/db/magic_single_card.asp?cn=Jace,%20Memory%20Adept,我試圖找到頁面頂部的藍色價格字符串。 並感謝您的迴應! –

+0

謝謝大家,它現在工作完美!我使用西蒙的解決方案。 –

+0

@ user1959659 - 好吧,將它標記爲答案:-) –