0

我需要得到第二个表第 4 行的总和。我想从第二列开始求和。我该怎么做呢?

    static void Main()
    {
        String htmlFile = "C:/Temp/Test_11.html";

        HtmlDocument doc = new HtmlDocument();
        doc.Load(htmlFile);

        //var sum = doc.DocumentNode.SelectSingleNode("//table")  // <<<< No error when I access the first table 
        var sum = doc.DocumentNode.SelectSingleNode("//table[2]")  // <<<< Error when I try to access the 2nd table
            .Elements("tr")
            // Skip this many rows from the top
            .Skip(1)
            // .ElementAt(2) = third column
            .Sum(tr => int.Parse(tr.Elements("td").ElementAt(2).InnerText));
        Console.WriteLine(sum);

        Console.ReadLine();
    }

下面是由两个表组成的 html 文件。总和的结果应该是 26。

<html>
<head>
<title>Tables</title>
</head>
<body>
<table border="1">
  <tr>
    <th>Environment1</th>
    <th>Databases</th>
    <th>Sites</th>
    <th>Site Collection Storage Used (GB)</th>
    <th>Ref</th>
</th>
  </tr>
  <tr>
    <td>Public1</td>
    <td>14</td>
    <td>28</td>
    <td>32.6602</td>
    <td>2</td>
  </tr>
  <tr>
    <td>Local1</td>
    <td>4</td>
    <td>9</td>
    <td>21.0506</td>
    <td>1</td>
  </tr>
  <tr>
    <td>Shared1</td>
    <td>6</td>
    <td>9</td>
    <td>17.092</td>
    <td>9</td>
  </tr>
</table>
<p></p>
<table border="1">
  <tr>
    <th>Environment2</th>
    <th>Databases</th>
    <th>Sites</th>
    <th>Site Collection Storage Used (GB)</th>
    <th>Ref</th>
 </th>
  </tr>
  <tr>
    <td>Public2</td>
    <td>15</td>
    <td>13</td>
    <td>31.5602</td>
    <td>1</td>
  </tr>
  <tr>
    <td>Local2</td>
    <td>5</td>
    <td>8</td>
    <td>7.0302</td>
    <td>3</td>
  </tr>
  <tr>
    <td>Shared2</td>
    <td>4</td>
    <td>5</td>
    <td>13.109</td>
    <td>4</td>
  </tr>
</table>

</body>
</html>

请在这件事上给予我帮助

4

1 回答 1

0

以下示例也是如此,唯一需要注意的是我已经硬编码了 xPath 中的位置和元素,您可以自由更改以适应您的要求。

var tbl = xdoc.SelectNodes("//table[2]//tr[4]//td[position()>1]");

// In order to select the 1st table, the following statement can be used.
//var tbl = xdoc.SelectNodes("//table[2]//tr[4]//td[position()>1]");

int sum = 0;

foreach (XmlNode item in tbl) 
{
     decimal value = 0;
     if (decimal.TryParse(item.InnerText, out value))
     {
         sum += (int)value;
     }
 }

 Console.WriteLine("Number of (Web Application) sites: " + sum);

有几点需要注意。您有十进制值,并将它们视为整数。因此,我使用小数临时变量来获取所有值,然后进行整数转换。然而,这不是最佳做法。您必须根据您的确切要求进行调查。

此外,我已经使用了,TryParse因此只有可以解析的项目才能用于计算。

请在这里分享您的理解。

于 2013-05-26T06:03:25.680 回答