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

标签 ruby nokogiri

我正在使用 Nokogiri 的 xpath 方法寻找我的 input 元素。 它返回类 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">]>

有没有比使用 to_s 转换它更快更简洁的方法来获取 input 的值:

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

并用正则表达式匹配?

最佳答案

一些事情会有所帮助:

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

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

请注意,Nokogiri 在 searchat 中使用了一点测试来尝试确定选择器是 CSS 还是 XPath,然后相应地分支到特定方法。测试可能会被愚弄,此时您应该使用特定的 CSS 或 XPath 变体,或者如果您偏执,则始终使用它们。在使用 Nokogiri 的这些年里,我只遇到过一次代码困惑的情况。 如果您想更明确地了解您想要的 input,您可以查看标签的参数:

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

熟悉searchat 及其变体之间的区别,Nokogiri 将真正对您有用。了解如何访问参数和 text() 节点,您将了解解析 HTML 和 XML 所需知识的 99%。

关于ruby - 如何从 Nokogiri::XML::NodeSet 获取输入值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11051649/

相关文章:

ruby-on-rails - Mechanize 从 HTML 中提取图像

ruby - 如何通过 Gemfile 到 "gem install nokogiri -- --use-system-libraries"

css - 如何在 Nokogiri 中找到 ComputedStyle 元素?

ruby - 从表中的类名创建动态变量,将 td 值移动到该行数组或散列中?

ruby - “Stack level too deep” 运行 rake 数据库 :create:all

ruby-on-rails - ActionController::Parameters 'require' 方法返回一个字符串

ruby - 蒙古人;错误 Mongo::Error::OperationFailure:未授权查询

ruby - 使用 Ruby 抓取图像数据库

javascript - 你能在javascript中创建一个check_box_tag吗

ruby - 从 ruby​​ 的独家范围中获得最大值(value)的最快方法