В моем случае есть одна таблица, представляющая собой список устройств с маршрутизатора. Если вы хотите прочитать таблицу, используя TR / TH / TD (строка, заголовок, данные) вместо матрицы, как указано выше, вы можете сделать что-то вроде следующего:
List<TableRow> deviceTable = (from table in document.DocumentNode.SelectNodes(XPathQueries.SELECT_TABLE)
from row in table?.SelectNodes(HtmlBody.TR)
let rows = row.SelectSingleNode(HtmlBody.TR)
where row.FirstChild.OriginalName != null && row.FirstChild.OriginalName.Equals(HtmlBody.T_HEADER)
select new TableRow
{
Header = row.SelectSingleNode(HtmlBody.T_HEADER)?.InnerText,
Data = row.SelectSingleNode(HtmlBody.T_DATA)?.InnerText}).ToList();
}
TableRow - это простой объект с заголовком и данными в качестве свойств.
Подход заботится о пустоте и в этом случае:
<tr>
<td width="28%"> </td>
</tr>
строка без заголовка. Объект HtmlBody с висящими на нем константами, вероятно, легко выводится, но я до сих пор извиняюсь за это. Я пришел из мира, где, если у вас есть "в вашем коде, он должен быть либо постоянным, либо локализуемым.