语法问题C#Html敏捷包

语法问题C#Html敏捷包,c#,html-parsing,html-agility-pack,C#,Html Parsing,Html Agility Pack,此代码对html文档中包含的第一个表中的最后一列进行求和。(它忽略第一行。) 1.)如何对指定列进行求和,而不仅仅是最后一列 var sum = doc.DocumentNode.SelectSingleNode("//table") .Elements("tr") .Skip(1) .Sum(tr => int.Parse(tr.Elements("td").Last().InnerText)); 这个代码来自哪里。。。 给我

此代码对html文档中包含的第一个表中的最后一列进行求和。(它忽略第一行。)

1.)如何对指定列进行求和,而不仅仅是最后一列

var sum = doc.DocumentNode.SelectSingleNode("//table")
          .Elements("tr")
          .Skip(1)
          .Sum(tr => int.Parse(tr.Elements("td").Last().InnerText));
这个代码来自哪里。。。 给我这个代码是为了回答:() 但我无法解释它是如何工作的

我做了什么来回答我的问题。。。 我已经花了好几个小时试图理解语法。我的努力包括,;VS对象浏览器、Html Agility Pack CHM文档、关于XPath的W3Schools教程和代码实验。我还是有点迷路。我想更好地理解语法,以便能够独立地继续我的项目

2.下面是我对语法的最佳解释。我错在哪里?我在哪里遗漏了什么?

var sum = doc.DocumentNode.SelectSingleNode("//table")
上面得到第一个表。如果它是
//表[2]
,它将得到第二个表

.Elements("tr")
上面是否指定总和将超过行集合

.Skip(1)
第一行从要求和的行集合(列)中排除

.Sum(tr => int.Parse(tr.Elements("td").Last().InnerText));
int.Parse(
上面的内容有点令人费解,但我会尝试

.Sum(
Sum语句已启动

tr => 
什么是“tr”?这不是引用,因为它似乎与父母。这不是一个关键词,是吗?解释 上面的片段开始将要求和的行(列)的范围

.Sum(tr => int.Parse(tr.Elements("td").Last().InnerText));
int.Parse(
将文本转换为整数

tr.Elements("td").Last().InnerText));
困惑

tr
她又是那个“tr”了

从VS对象浏览器
.Elements()
“获取集合中的所有第一代元素”。这是什么意思

tr.Elements("td")
“td”指定要求和的是数据元素

tr.Elements("td").Last()
.Last()
指定将“td”求和的范围出现在最后一列上。 有其他的方法写这篇文章,我说的对吗? 除了“last”列,如何指定其他内容?如何指定第三列

.InnerText
为什么需要
.InnerText
int.Parse()
是否将其内容作为字符串并将其转换为int?我错过了什么

3.你能为html敏捷包推荐一些学习资源吗?我刚刚参加了W3Schools XPath教程。我看到了远程语法的相似性,但似乎没有任何东西对处理表非常有用

上面的代码可以针对的示例html:

<html>
<body>
<table border="1">
  <tr>
    <th>Product Group A</th>
    <th>Mat'l</th>
    <th>Weight</th>
    <th>Size</th>
  </tr>
  <tr>
    <td>ELL</td>
    <td>Plastic1</td>
    <td>5</td>
    <td>11</td>
  </tr>
  <tr>
    <td>TEE</td>
    <td>Plastic2</td>
    <td>8</td>
    <td>23</td>
  </tr>
  <tr>
    <td>Straight</td>
    <td>Plastic3</td>
    <td>21</td>
    <td>71</td>
  </tr>
</table>
<p></p>
<table border="1">
  <tr>
    <th>Product Group B</th>
    <th>Mat'l</th>
    <th>Weight</th>
    <th>Size</th>
  </tr>
  <tr>
    <td>Plumb Bob</td>
    <td>Bronze1</td>
    <td>8</td>
    <td>3</td>
  </tr>
  <tr>
    <td>Hammer</td>
    <td>Bronze2</td>
    <td>12</td>
    <td>8</td>
  </tr>
  <tr>
    <td>Sleeve Bearing</td>
    <td>Bronze3</td>
    <td>18</td>
    <td>7</td>
  </tr>
</table>
</body>

产品组A
材料
重量
大小
厄尔
塑料1
5.
11
球座
塑料2
8.
23
直的
塑料3
21
71

产品组B 材料 重量 大小 铅锤 古铜色 8. 3. 锤子 青铜色 12 8. 套筒轴承 青铜色 18 7.

非常感谢你

希望有人能给出一个更完整的解释语法的答案,但是现在,您可以通过将.Last()更改为.ElementAt(n)来对n列求和。该代码将XPATH语法(//table)和LINQ语法与lambda表达式(tr)混合在一起。您不必学习LINQ和lambda来使用HTML Agility Pack,您可以使用XPATH加上常规c#代码,但许多人喜欢它,这就是为什么支持它。关于Lambda的更多信息:PS:你应该一次只问一个问题。西蒙,谢谢。你的回复很有帮助。谢谢你的代码!