У меня есть html-таблица. Мне нужно получить значение значения первого <td>
в последнем <tr>
. Вот моя структура таблицы. Значение, требуемое от функции ниже, 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;
}
Метод не возвращает значение. Любая помощь высоко ценится.
Это должно сделать это:
HtmlDocument doc = new HtmlDocument();
doc.Load(MyHtmlFile);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//table[@id='test']/tr[last()]/td");
Console.WriteLine(node.InnerText);
Обратите внимание на использование функции last () XPATH
XPath, который вы используете для заполнения переменной table
- "//table[@id='test']//tr[1]"
, выбирает второй элемент TR
, а не таблицу.
Это скорее всего должно быть "//table[@id='test']"
.
В этот момент для извлечения потомков TR
узлов в переменную trNodes
вы должны использовать:
IEnumerable<HtmlNode> trNodes = table.SelectNodes("tr");