回答編集履歴

2

補足

2023/04/30 12:17

投稿

otn
otn

スコア84633

test CHANGED
@@ -1,6 +1,6 @@
1
1
  他の回答のコメントに書くべき所を回答に書いてしまったのですが、削除だけするのも何なので、別解を書いておきます。
2
- `<div id="CONTENTS_MAIN">`の子要素を、`h1.mmmm`で分割して、`div`を数えます。
2
+ `<div id="CONTENTS_MAIN">`の子要素を全部並べて、`h1.mmmm`でグループに分割して、それぞれで`div`を数えます。
3
- タグだけ見るのかクラスも見るのか、それぞれ1例ずつにしています。
3
+ クラス名までチェックしたいのか、質問の記述が曖昧なので、タグだけ見るのかクラスも見るのか、それぞれ1例ずつにしています。
4
4
  ```Ruby
5
5
  counts = doc.css("div#CONTENTS_MAIN > *").slice_when{|x,y| x.name=="h1" && x["class"]=="mmmm"}.map{|x| x.count{|y| y.name=="div"}}
6
6
  ```

1

コメントを回答に変更

2023/04/30 09:15

投稿

otn
otn

スコア84633

test CHANGED
@@ -1,4 +1,9 @@
1
- '//h1["mmmm"]' []内は常なので、'//h1' と同じです。
1
+ 回答のコメント書くべき所を回答に書いてしまったのですが、削除だけするのも何なので、別解を書いておきます。
2
- クラス属性見るには'//h1[@class="mmmm"]' です。
2
+ `<div id="CONTENTS_MAIN">`の子要素を、`h1.mmmm`分割して、`div`を数えます。
3
+ タグだけ見るのかクラスも見るのか、それぞれ1例ずつにしています。
4
+ ```Ruby
5
+ counts = doc.css("div#CONTENTS_MAIN > *").slice_when{|x,y| x.name=="h1" && x["class"]=="mmmm"}.map{|x| x.count{|y| y.name=="div"}}
6
+ ```
7
+ ただし、結果は`[0, 3, 2, 1]`のように先頭のh1タグの前の個数も数えますので、不要なら結果の先頭を削除。
3
8
 
4
- この例だと、h1タグのクラス属性はすべてmmmmなので、結果はたまたま一致しますが。
9
+