回答編集履歴

2

コメントを受けての追記

2020/05/07 11:40

投稿

otn
otn

スコア84576

test CHANGED
@@ -41,3 +41,29 @@
41
41
 
42
42
 
43
43
  1つの`div.aaa`ごとに文字列をつなげたいとかだとちょっと面倒だと思います。
44
+
45
+
46
+
47
+ #追記2
48
+
49
+ > 1つの`div.aaa`ごとに文字列をつなげたいとかだとちょっと面倒だと思います。
50
+
51
+
52
+
53
+ そうでも無かった。
54
+
55
+ ```Ruby
56
+
57
+ extracted_datas =
58
+
59
+ page.xpath("//div[@class='aaa']").map do |div|
60
+
61
+ foo = div.xpath(".//text()")
62
+
63
+ bar = div.xpath(".//span[@class='bbb']//text()")
64
+
65
+ (foo-bar).map{|x| x.text.strip}.join
66
+
67
+ end
68
+
69
+ ```

1

コメントを受けての追記

2020/05/07 11:40

投稿

otn
otn

スコア84576

test CHANGED
@@ -11,3 +11,33 @@
11
11
 
12
12
 
13
13
  子ノードがある場合も、それを含めるのか含めないのかを明確にすれば、なんとかなります。
14
+
15
+
16
+
17
+ #追記
18
+
19
+ 直下でないテキストノードも対象とする場合。
20
+
21
+
22
+
23
+ ```Ruby
24
+
25
+ # div.aaa の中の全テキストノードを取得
26
+
27
+ foo = page.xpath("//div[@class='aaa']//text()")
28
+
29
+ # span.bbb の中の全テキストノードを取得
30
+
31
+ bar = page.xpath("//div[@class='aaa']/span[@class='bbb']//text()")
32
+
33
+ # その差を求める
34
+
35
+ extracted_datas =
36
+
37
+ (foo-bar).map{|x| x.text.strip}.select{|x| x!=""}
38
+
39
+ ```
40
+
41
+
42
+
43
+ 1つの`div.aaa`ごとに文字列をつなげたいとかだとちょっと面倒だと思います。