rubyのmechanizeで質問です。

.search("form[@name = 'NAME']).each do| name |
を使用して、あるページのNAME要素の中身を抜き出したいと思っています。
この際、NAMEがひとつだけのページと2つ複数こあるページが混在しています。2つあるページは最後のNAME要素の中身を抜き出したいのですが、同じnameが2つある場合、最後のnameの内容を取得するにはどのように記述すればよいのでしょうか?
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/02/06 11:31:07
  • 終了:2013/02/07 12:36:28

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4595ベストアンサー獲得回数19342013/02/06 12:09:18

Array の last メソッドを使う。

name_element = page.search("form[@name = 'NAME']").last
unless name_element.nil? then
    NAME を使う処理
end

Array のリファレンス。
http://doc.ruby-lang.org/ja/1.9.3/class/Array.html


もし、ベタに書くなら、こんな感じ。

name_element = nil
page.search("form[@name = 'NAME']").each { |ele|
    name_element = ele
}
unless name_element.nil? then
    NAME を使う処理
end


追記です。

例えば、value='A'の場合だったら処理を実行するというにするにはどうすればいいのでしょうか?

きっと、form も複数あるんでしょうね。
動作を試してませんが、こんな雰囲気で。

last_element = nil
page.forms.each { |form|
    form.field_with(:value => 'A') { |field|
        last_element = field
    }
}
unless last_element.nil? then
    value='A' な要素を使う処理
end

もし、form を名前とかで特定できるなら、こんなふうにも。

last_element = nil
page.form_with(:name => 'form_1') { |form|
    form.field_with(:value => 'A') { |field|
        last_element = field
    }
}
unless last_element.nil? then
    value='A' な要素を使う処理
end

探したいのが、<input type="button"> だったら、field_with ではなく、button_with メソッドを使う。
http://w.livedoor.jp/ruby_mechanize/d/Mechanize%3A%3AForm


関連するドキュメントを。
http://mechanize.rubyforge.org/Mechanize/Form.html
http://mechanize.rubyforge.org/Mechanize/Form/Field.html

他1件のコメントを見る
id:a-kuma3

例えば、value='A'の場合だったら処理を実行するというにするにはどうすればいいのでしょうか?

回答に追記しました。

最初の質問にあった「最後の」というのを意識して書いてますが、適宜、読み替えてください。

2013/02/06 19:31:09
id:osietekudasaibadr

a-kuma3さん
本当にありがとうございます。
おかげで思い通りの結果に処理をすることができました。

わからないことだらけの初心者ですが、rubyを頑張って習得したいと思います。
ありがとうございます。

2013/02/07 12:38:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません