teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コメントを受けての追記

2020/05/07 11:40

投稿

otn
otn

スコア86349

answer CHANGED
@@ -19,4 +19,17 @@
19
19
  (foo-bar).map{|x| x.text.strip}.select{|x| x!=""}
20
20
  ```
21
21
 
22
- 1つの`div.aaa`ごとに文字列をつなげたいとかだとちょっと面倒だと思います。
22
+ 1つの`div.aaa`ごとに文字列をつなげたいとかだとちょっと面倒だと思います。
23
+
24
+ #追記2
25
+ > 1つの`div.aaa`ごとに文字列をつなげたいとかだとちょっと面倒だと思います。
26
+
27
+ そうでも無かった。
28
+ ```Ruby
29
+ extracted_datas =
30
+ page.xpath("//div[@class='aaa']").map do |div|
31
+ foo = div.xpath(".//text()")
32
+ bar = div.xpath(".//span[@class='bbb']//text()")
33
+ (foo-bar).map{|x| x.text.strip}.join
34
+ end
35
+ ```

1

コメントを受けての追記

2020/05/07 11:40

投稿

otn
otn

スコア86349

answer CHANGED
@@ -4,4 +4,19 @@
4
4
  page.xpath("//div[@class='aaa']/text()").map{|x| x.text.strip}.select{|x| x!=""}
5
5
  ```
6
6
 
7
- 子ノードがある場合も、それを含めるのか含めないのかを明確にすれば、なんとかなります。
7
+ 子ノードがある場合も、それを含めるのか含めないのかを明確にすれば、なんとかなります。
8
+
9
+ #追記
10
+ 直下でないテキストノードも対象とする場合。
11
+
12
+ ```Ruby
13
+ # div.aaa の中の全テキストノードを取得
14
+ foo = page.xpath("//div[@class='aaa']//text()")
15
+ # span.bbb の中の全テキストノードを取得
16
+ bar = page.xpath("//div[@class='aaa']/span[@class='bbb']//text()")
17
+ # その差を求める
18
+ extracted_datas =
19
+ (foo-bar).map{|x| x.text.strip}.select{|x| x!=""}
20
+ ```
21
+
22
+ 1つの`div.aaa`ごとに文字列をつなげたいとかだとちょっと面倒だと思います。