【问题标题】:Linq to XML VB.NET Select and edit rows and cells from a HTML tableLinq to XML VB.NET 从 HTML 表格中选择和编辑行和单元格
【发布时间】:2015-04-26 09:27:44
【问题描述】:

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

我可以读取它并将其解析为 xElement,然后我需要使用 LINQ to 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 在其中我可以选择所有行并为每一行根据它们的相对位置对单元格应用计算。

【问题讨论】:

    标签: xml vb.net linq html-table


    【解决方案1】:

    一种可能的方法,假设您的表格行具有一致的结构*:

    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 列总是包含有效的十进制字符串

    【讨论】:

    • 当我用真实表尝试你的代码 sn-p 时,源表是一个名为 stringTable 的 html 字符串块。如何声明 xml vafible 使其可查询?如果我只写了 dim xml = stringTable,那么我会从 Visual Studio 中得到一个错误:无法从 system.char 转换为 System.Xml.Linq.XElement。我被困在那里..
    • @user3553401 Dim xml = XElement.Parse(stringTable)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多