如何从Nokogiri :: XML :: NodeSet获取输入值?

min*_*gle 4 ruby nokogiri

我正在input使用Nokogiri的xpath方法寻找我的元素.它返回了一个类的对象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">]>
Run Code Online (Sandbox Code Playgroud)

有没有input比使用to_s以下方法更快更清晰地获取值的方法:

"<input type=\"text\" name=\"creditInstallmentAmount\" style=\"width:240px\" value=\"94.8\" readonly>"
Run Code Online (Sandbox Code Playgroud)

并与正则表达式匹配?

the*_*Man 17

一些事情会有所帮助:

Nokogiri有这个at方法,它是等效的search(...).first,并且,它不是返回一个NodeSet,而是返回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
Run Code Online (Sandbox Code Playgroud)

另外,请注意我使用的是CSS表示法,而不是XPath.Nokogiri支持这两种方式,很多时候CSS更加明显且易于阅读.为方便起见,该at_css方法是别名at.

如果您想更明确地了解input自己想要的内容,可以查看标记的参数:

doc.at('input[@name="creditInstallmentAmount"]')['value'] # => "94.8"
Run Code Online (Sandbox Code Playgroud)

熟悉的区别search,并at和他们的一些变体,并引入nokogiri将真正成为对你有用.了解如何访问参数和text()节点,您将了解解析HTML和XML所需知道的99%.