Получение данных из файла HTML в таблицу данных - PullRequest
0 голосов
/ 17 марта 2020

Я использую пакет 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 &amp; 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>
...