このコードは、html ドキュメントに含まれる最初のテーブルの最後の列を合計します。(最初の行は無視されます。)
1.)最後の列だけでなく、指定した列を合計するにはどうすればよいですか?
var sum = doc.DocumentNode.SelectSingleNode("//table")
.Elements("tr")
.Skip(1)
.Sum(tr => int.Parse(tr.Elements("td").Last().InnerText));
このコードはどこから来たのか... ( C# と html-agility-pack を使用した html テーブルの Sum 列)への返信でこのコードを受け取りましたが、それがどのように機能するかについての説明は得られませんでした。
私の質問に答えるために私がしたこと...私は構文を理解しようと何時間も働きました。私の努力には以下が含まれます。VS オブジェクト ブラウザー、Html-Agility-Pack CHM ドキュメント、XPath に関する W3Schools チュートリアル、およびコードの実験。私はまだ少し迷っています。ある程度の独立性を持ってプロジェクトを続行できるように、構文をよりよく理解したいと考えています。
2.)以下は構文の私の最良の解釈です。どこが間違っていますか?どこに何か足りないのですか?
var sum = doc.DocumentNode.SelectSingleNode("//table")
上記は最初のテーブルを取得します。もしそうなら、それは//table[2]
2番目のテーブルを取得します
.Elements("tr")
上記は、合計が行セットを超えることを指定していますか?
.Skip(1)
最初の行は、合計される行セット (列) から除外されます。
.Sum(tr => int.Parse(tr.Elements("td").Last().InnerText));
上記は少し不可解ですが、試してみます...
.Sum(
合計明細書を開始しました
tr =>
「トレ」とは?両親に表示されるため、引用符ではありません。キーワードじゃないですか。説明。上記のフラグメントは、合計される行 (列) の範囲を開始します。
int.Parse(
テキストを整数に変換します
tr.Elements("td").Last().InnerText));
紛らわしい?
tr
彼女は再びその「tr」です
tr.Element(
VS Object Browser から.Elements()
「コレクション内のすべての第 1 世代の要素を取得します」。どういう意味ですか?
tr.Elements("td")
「td」は、合計されるのがデータ要素であることを指定します
tr.Elements("td").Last()
は.Last()
、「td」が合計される範囲が最後の列で発生することを指定します。これを書く別の方法があるというのは正しいでしょうか?「最後の」列以外を指定するにはどうすればよいですか? 3 番目の列をどのように指定しますか?
.InnerText
なぜ.InnerText
必要なのですか?int.Parse()
その内容を文字列として取り、int に変換しませんか? 私は何が欠けていますか?
3.) html-agility-pack の学習リソースをお勧めできますか? XPath の W3Schools チュートリアルを受講しました。リモート構文の類似性が見られますが、テーブルの操作に非常に役立つと思われるものは何もありません。
上記のコードを実行できるサンプル 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>
どうもありがとう!