2012-09-19 33 views
2

我已經有下面的HTML頁面:獲取嵌套表格單元格與HtmlAgilityPack

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 

<head> 
</head> 

<body> 
<div style="LEFT: 135; WIDTH: 450; POSITION: absolute; TOP: 70"> 
    <a name="content_begins"></a> 
    <table cellSpacing="0" cellPadding="0" width="100%" border="0"> 
    <tr> 
     <td vAlign="top"> 
     <table class="PortalGadget" cellSpacing="0" cellPadding="0" width="100%" border="0"> 
     <tr> 
      <td> 
      <table cellSpacing="6" cellPadding="0" border="0"> 
      <form name="authenticator" ACTION="auth-cup" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded"> 
       <tr bgColor="#6c8899"> 
       <td><font face="Trebuchet MS" color="#ffffff">&nbsp;*** You Have Already Logged In ***</font></td> 
       </tr> 

       <tr height="20"> 
       <td vAlign="bottom" height="20"> 
       <font face="Trebuchet MS" size="-1">Context:</font></td> 
       </tr> 
       <tr> 
       <td></td> 
       </tr> 
       <tr> 
       <td vAlign="bottom" height="20"> 
       <font face="Trebuchet MS" size="-1">Username:</font></td> 
       </tr> 
       <tr> 
       <td><input size="40" name="username"></td> 
       </tr> 
       <tr> 
       <td><font face="Trebuchet MS" size="-1">Password:</font></td> 
       </tr> 
       <tr> 
       <td><input type="password" size="40" name="password"></td> 
       </tr> 
       <tr> 
       <td vAlign="bottom" height="20"> 
       <font face="Trebuchet MS" size="-1">Destination:</font></td> 
       </tr> 
       <tr> 
       <td> 
       <input size="40" name="url" value="http://ya.ru/"></td> 
       </tr> 
       <tr> 
       <!---- Hidden field to identify forward/reverse proxy path ------> 
       <input TYPE="hidden" NAME="proxypath" VALUE="forward"> 
       </tr> 
       <tr> 
       <td vAlign="bottom" align="left"> 
       <input type="submit" alt="Login" value="Login" border="0" name="loginButton">&nbsp;&nbsp; 
       <input type="reset" alt="Reset" value="Reset"></td> 
       </tr> 
       <tr height="5"> 
       <td height="5"><hr SIZE="2"></td> 
       </tr> 
       <tr> 
       <td><font face="Trebuchet MS" size="-1"> 
       <p>Copyright 1999-2003 Novell, Inc. All rights reserved.</p> 
       </font></td> 
       </tr> 
      </form> 
      </tbody> 
      </table> 
      </td> 
     </tr> 
     </table> 
     </td> 
    </tr> 
    </table> 
</div> 
</body> 
</html> 

我想文字「你已經登錄」從TD。我有這樣的代碼:

Stream str = SendData().GetResponseStream(); 
      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
      doc.Load(str); 
      foreach (HtmlAgilityPack.HtmlNode table in doc.DocumentNode.SelectNodes("//table[@class='PortalGadget']")) 
      { 
       MessageBox.Show("Found: " + table.Id); 
       foreach (HtmlAgilityPack.HtmlNode row in table.SelectNodes("//table")) 
       { 

        HtmlAgilityPack.HtmlNodeCollection cells = row.SelectNodes("tr"); 

        if (cells == null) 
        { 
         continue; 
        } 

        foreach (HtmlAgilityPack.HtmlNode cell in cells) 
        { 
         MessageBox.Show("cell: " + cell.InnerText); 
        } 
       } 
      } 

但我無法在代碼中獲得文本「您已經登錄」。在這種情況下如何獲得嵌套的表格單元格值?

回答

2

嗯,我發現解決方案似乎對我說:

string value = doc.DocumentNode.SelectNodes("//table[@class='PortalGadget']/tr/td/table/tr/td")[0].InnerText; 
1

要從另一個節點中選擇節點,您必須放置'。'在XPath的開始。

所以table.SelectNodes("//table")成爲table.SelectNodes(".//table")

0

這真的取決於你認爲是判別此數據,但是當我看HTML,似乎與設置爲#FFFFFF的BGCOLOR FONT元素的,所以這就是相應的HTML敏捷性包代碼:

HtmlDocument doc = new HtmlDocument(); 
doc.Load(yourHtmlFile); 
HtmlNode node = doc.DocumentNode.SelectSingleNode("//font[@color='#ffffff']"); 
Console.WriteLine(node.InnerText.Trim()); 

將輸出:

&nbsp;*** You Have Already Logged In ***