我有以下html页面:
<!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"> *** 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">
<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);
}
}
}
但是我无法在代码中获得“你已经登录”的文字。如何在此场景中获取嵌套表格单元格值?
答案 0 :(得分:2)
嗯,我发现解决方案似乎在我身上:
string value = doc.DocumentNode.SelectNodes("//table[@class='PortalGadget']/tr/td/table/tr/td")[0].InnerText;
答案 1 :(得分:1)
要从另一个节点选择节点,您必须输入'。'在XPath的开头。
因此table.SelectNodes("//table")
变为table.SelectNodes(".//table")
答案 2 :(得分:0)
这实际上取决于你认为对这些数据有什么区别,但是当我看到HTML时,似乎将BGCOLOR设置为#ffffff的FONT元素是,所以这是相应的Html Agility Pack代码:
HtmlDocument doc = new HtmlDocument();
doc.Load(yourHtmlFile);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//font[@color='#ffffff']");
Console.WriteLine(node.InnerText.Trim());
将输出:
*** You Have Already Logged In ***