我有一个html表格结构。我需要获取最终<tr>
标记中第一个<td>
的值。这是我的表结构。我需要从下面的函数getFinalNodeValue中得到的值是"3“。
<table id="test">
<tr>
<td>ID</td>
<td>Name</td>
<td>Age</td>
</tr>
<tr>
<td>1</td>
<td>Yasoda</td>
<td>21</td>
</tr>
<tr>
<td>2</td>
<td>Samantha</td>
<td>25</td>
</tr>
<tr>
<td>3</td>
<td>Sajee</td>
<td>26</td>
</tr>
</table>
下面是我使用HtmlAgilityPack编写的代码。
public String getFinalNodeValue(String URL)
{
var webGet = new HtmlWeb();
var pageSource = webGet.Load(URL);
var table = pageSource.DocumentNode.SelectSingleNode("//table[@id='test']//tr[1]");
string id = null;
IEnumerable<HtmlNode> trNodes = table.DescendantsAndSelf();
foreach (var currentItem in trNodes)
{
if (currentItem == trNodes.Last())
{
IEnumerable<HtmlNode> tdNodes = currentItem.Descendants();
foreach (var x in tdNodes)
{
if(x == tdNodes.First())
{
id = x.InnerText;
}
else
{
break;
}
}
}
else
{
continue;
}
}
return id;
}
该方法不返回值。任何帮助都是非常感谢的。
发布于 2013-03-11 22:20:39
这应该可以做到:
HtmlDocument doc = new HtmlDocument();
doc.Load(MyHtmlFile);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//table[@id='test']/tr[last()]/td");
Console.WriteLine(node.InnerText);
注意XPATH last()函数的用法
发布于 2013-03-11 20:59:17
用来填充table
变量- "//table[@id='test']//tr[1]"
的XPath选择第二个TR
元素,不选择该表。
这最有可能就是"//table[@id='test']"
。
此时,要将子代TR
节点提取到trNodes
变量中,您应该使用:
IEnumerable<HtmlNode> trNodes = table.SelectNodes("tr");
发布于 2013-03-11 21:05:25
如果您像这样更改您的表:
<table id="test" runat="server">
您可以在代码后台中迭代它,如下所示:
HtmlTable myTable = this.test;
int rowCount = myTable.Rows.Count;
HtmlTableCell td = myTable.Rows(rowCount - 1).Cells(0);
string val = td.InnerText;
https://stackoverflow.com/questions/15339142
复制相似问题