Я использую пакет HTML Agility для разбора файла HTML в одну таблицу данных. В файле есть две отдельные таблицы. Первая таблица - это сводная таблица, а вторая таблица - дополнительные данные. Для каждой строки в таблице данных мне нужна информация из сводной таблицы, а также данные из каждой строки таблицы.
Я могу найти итоговую строку, если она имеет только одну пару имя-значение, но после ее запуска чтобы включить информацию о форматировании, она разбивается.
Мой код:
private static DataTable RetrieveHTML(string fileToLoad, string source)
{
DataTable dt = new DataTable();
HtmlDocument doc = new HtmlDocument();
doc.Load(fileToLoad);
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Value", typeof(string));
int count = 0;
foreach (var row in doc.DocumentNode.SelectNodes("//table/tr"))
{
DataRow dr = dt.NewRow();
foreach (var cell in row.SelectNodes("td"))
{
if ((count % 2 == 0))
{
dr["Name"] = cell.InnerText.Replace(" ", " ");
}
else
{
dr["Value"] = cell.InnerText.Replace(" ", " ");
dt.Rows.Add(dr);
}
count++;
}
}
return dt;
}
Пример файла данных:
<h3>File Transaction Results</h3>
<table border="0">
<tr>
<td>Client Name:</td>
<td>Siemens</td>
</tr>
<tr>
<td>Client ID:</td>
<td>7000002</td>
</tr>
<tr>
<td height="20"></td>
</tr>
<tr>
<td><b>File Summary</b></td>
<td colspan="6"></td>
<td><b>Payment Instructions</b></td>
<td width="5%"></td>
<td align="center">Number</td>
</tr>
<tr>
<td>Batch File Name:</td>
<td>6020000240-03032020-00011301.txt</td>
<td colspan="2"></td>
<td>File Status:</td>
<td>Successful</td>
<td width="20%"></td>
<td align="right">Sent</td>
<td width="5%"></td>
<td>138</td>
</tr>
<tr>
<td>Batch File ID:</td>
<td>0024387327</td>
<td colspan="2"></td>
<td>Date Uploaded:</td>
<td>03-Mar-2020</td>
<td width="20%"></td>
<td align="right">Successful</td>
<td width="5%"></td>
<td>138</td>
</tr>
<tr>
<td>Creator:</td>
<td>STP-SIEMENSCORPOR</td>
<td colspan="5"></td>
<td align="right">Failed</td>
<td width="5%"></td>
<td>0</td>
</tr>
</table>
<hr>
<table width="98%" class="grid" cellspacing="0px" cellpadding="2px">
<tr>
<th align="left" valign="center" nowrap="true">Request ID</th>
<th align="left" valign="center" nowrap="true">Transaction ID</th>
<th align="center" valign="center" nowrap="true">Result</th>
<th align="center" valign="center" nowrap="true">Transaction Date</th>
<th align="center" valign="center" nowrap="true">Due Date</th>
<th align="center" valign="center" nowrap="true">Currency</th>
<th align="center" valign="center" nowrap="true">Value</th>
<th align="left" valign="center" nowrap="true">Source Account</th>
<th align="left" valign="center" nowrap="true">Supplier Name</th>
<th align="left" valign="center" nowrap="true">Supplier Account</th>
</tr>
<tr>
<td align="left">0000122819</td>
<td align="left">7003535260</td>
<td align="center" width="80px">Accepted</td>
<td>03-Mar-2020</td>
<td>01-Jun-2020</td>
<td align="center" nowrap="true">USD</td>
<td align="center" nowrap="true">28,551.97</td>
<td align="left" nowrap="true">6020000240</td>
<td align="left" nowrap="true">Ilsco Corporation</td>
<td align="left" nowrap="true">6020006190</td>
</tr>
<tr>
<td class="grid" colspan="2"></td>
<td class="grid" align="left" colspan="7">Payment Due Date has been rolled forward from 31-May-2020 to 01-Jun-2020</td>
</tr>
<tr>
<td align="left">0000122820</td>
<td align="left">7003535220</td>
<td align="center" width="80px">Accepted</td>
<td>03-Mar-2020</td>
<td>01-Jun-2020</td>
<td align="center" nowrap="true">USD</td>
<td align="center" nowrap="true">4,387.94</td>
<td align="left" nowrap="true">6020000240</td>
<td align="left" nowrap="true">Tryco Tool & Manufacturing Co Inc</td>
<td align="left" nowrap="true">6020001450</td>
</tr>
<tr>
<td class="grid" colspan="2"></td>
<td class="grid" align="left" colspan="7">Payment Due Date has been rolled forward from 31-May-2020 to 01-Jun-2020</td>
</tr>
</table>