5

ノコギリの方法で自分のinput要素を探しています。xpathclass のオブジェクトを返していますNokogiri::XML::NodeSet:

[#<Nokogiri::XML::Element:0x3fcc0e07de14 name="input" attributes=[#<Nokogiri::XML::Attr:0x3fcc0e07dba8 name="type" value="text">, #<Nokogiri::XML::Attr:0x3fcc0e07db94 name="name" value="creditInstallmentAmount">, #<Nokogiri::XML::Attr:0x3fcc0e07db44 name="style" value="width:240px">, #<Nokogiri::XML::Attr:0x3fcc0e07dae0 name="value" value="94.8">, #<Nokogiri::XML::Attr:0x3fcc0e07da18 name="readonly" value="true">]>

inputを使用してこれをキャストするよりも、値を取得するためのより高速でクリーンな方法はありますかto_s?

"<input type=\"text\" name=\"creditInstallmentAmount\" style=\"width:240px\" value=\"94.8\" readonly>"

正規表現と一致しますか?

4

3 に答える 3

18

いくつかのことが役立ちます:

atNokogiri には , と同等のメソッドがあり、search(...).firstNodeSet を返す代わりに Node 自体を返すため、ノードから値を簡単に取得できます。

require 'nokogiri'

doc = Nokogiri::HTML('<input type="text" name="creditInstallmentAmount" style="width:240px" value="94.8" readonly>')
doc.at('input')['value'] # => "94.8"
doc.at('input')['value'].to_f # => 94.8

また、XPath ではなく CSS 表記を使用していることにも注意してください。Nokogiri は両方をサポートしており、多くの場合、CSS の方が明確で読みやすいです。このメソッドは、便宜上at_cssのエイリアスになっています。at

Nokogiri はセレクターが CSS であるか XPath であるかを判断するためにsearchとで小さなテストを使用し、それに応じて特定のメソッドに分岐することに注意してください。atテストはだまされる可能性があります。その時点で、特定の CSS または XPath バリアントを使用するか、偏執的である場合は常にそれらを使用する必要があります。Nokogiri を何年も使用してきた中で、コードが混乱する状況に遭遇したのは 1 回だけです。どちらが必要かをより明確にしたい場合inputは、タグのパラメーターを調べることができます。

doc.at('input[@name="creditInstallmentAmount"]')['value'] # => "94.8"

searchとと の違いに慣れるとat、のこぎりは本当に役に立ちます。パラメータとノードにアクセスする方法を学ぶと、text()HTML と XML を解析するために知っておく必要があることの 99% を知ることができます。

于 2012-06-16T03:13:46.263 に答える
0

わかりました、私は答えを見つけました:

.map{|node| node["value"]}.first
于 2012-06-15T13:36:17.950 に答える