To get each first cell that is a child of a row, you can do the following:
// from row
var firstCell = row.SelectSingleNode("td[1]");
// each first cell in a table (note: tbody is not always there)
var allFirstCells = table.SelectNodes("tbody/tr/td[1]");
In other words, use square brackets and the cell-number you wish to select. An exception is the last cell, which you can get using last()
as follows:
// from row
var lastCell = row.SelectSingleNode("td[last()]");
// each last cell in a table
var allLastCells = table.SelectNodes("tbody/tr/td[last()]");
If you want to get the cell next to a current cell, you can do something like this:
// from row
var firstCell = row.SelectSingleNode("td[1]");
var siblingCell = firstCell.SelectSingleNode("./following-sibling::td");
You may wish to check the return values for null, which means you either have a typo, or the DOM tree you loaded does not contain the cell you asked for.