Linq to XML VB.NET Select 并编辑 HTML table 中的行和单元格

Linq to XML VB.NET Select and edit rows and cells from a HTML table

我有一个普通的 table 由行 (tr) 和单元格 (td) 组成,没有特定属性。

我可以读取它并将其解析为 xElement,然后我需要使用 LINQ XML 并根据它们在行中的位置对某些单元格执行计算和更改。

<tr><td>A</td><td>12</td><td>2</td><td>Result</td></tr>
<tr><td>BA</td><td>3.65</td><td>6</td><td>Result</td></tr>

例如,我需要将单元格 2 和 3 的值相加并将结果写入单元格 4 的每一行。

我可以找到很多示例,其中给定的单元格具有名称属性,bot none 我可以在其中 select 所有行,并且对于每一行,根据它们的相对位置对单元格应用计算.

一种可能的方式,假设您的 table 行具有一致的结构*:

Dim xml = <table>
              <tr><td>A</td><td>12</td><td>2</td><td>Result</td></tr>
              <tr><td>BA</td><td>3.65</td><td>6</td><td>Result</td></tr>
          </table>

'loop through table rows'
For Each row As XElement In xml.<tr>
    'sum value of 2nd & 3rd cells'
    Dim sum = row.<td>.Skip(1).Take(2).Sum(Function(x) CDec(x))
    'get the last cell where the sum result will be displayed'
    Dim result = row.<td>.Last()
    'update last cell with sum result'
    result.Value = sum.ToString(CultureInfo.InvariantCulture)
Next
Console.WriteLine(xml.ToString())

控制台输出:

<table>
  <tr>
    <td>A</td>
    <td>12</td>
    <td>2</td>
    <td>14</td>
  </tr>
  <tr>
    <td>BA</td>
    <td>3.65</td>
    <td>6</td>
    <td>9.65</td>
  </tr>
</table>

* :每行有 4 个单元格,第 2 和第 3 列始终包含有效的十进制字符串