J'ai une structure de table html. Je dois obtenir la valeur de la valeur du premier <td>
dans la <tr>
finale. Voici la structure de ma table. La valeur que j'ai besoin de la fonction ci-dessous getFinalNodeValue est " 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>
Voici le code que j'ai écrit en utilisant 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;
}
La méthode ne retourne pas de valeur. Toute aide est grandement appréciée.
Cela devrait le faire:
HtmlDocument doc = new HtmlDocument();
doc.Load(MyHtmlFile);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//table[@id='test']/tr[last()]/td");
Console.WriteLine(node.InnerText);
Notez l'utilisation de la fonction XPATH last ()
Le XPath que vous utilisez pour remplir la variable de table
- "//table[@id='test']//tr[1]"
, sélectionne le deuxième élément TR
, sans la table.
Cela devrait probablement être "//table[@id='test']"
.
À ce stade, pour trNodes
les nœuds TR
descendants dans la variable trNodes
, vous devez utiliser:
IEnumerable<HtmlNode> trNodes = table.SelectNodes("tr");