【问题标题】:NoMethodError: undefined method `gsub' for #<Nokogiri::XML::ElementNoMethodError:#<Nokogiri::XML::Element 的未定义方法“gsub”
【发布时间】:2015-09-19 00:58:09
【问题描述】:

我在窥探,这张图片给我在 Nokogiri 带来了一些麻烦。例如

[8] pry(main)> img
=> #(Element:0x3fe805871b94 {
name = "img",
attributes = [
#(Attr:0x3fe8058716d0 { name = "alt", value = "Alt text here" }),
#(Attr:0x3fe805870460 { name = "src", value = "/path/to/file/a.jpg" }),
#(Attr:0x3fe80587044c { name = "style", value = "width: 452px; height: 190px" })]
})
[9] pry(main)> URI.escape(img)
NoMethodError: undefined method `gsub' for #<Nokogiri::XML::Element:0x007fd00b0e3728>
from /Users/snowcrash/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/uri/rfc2396_parser.rb:304:in `escape'

知道为什么以及如何解决它吗?

【问题讨论】:

  • 这个错误很清楚为什么。问题是您为什么认为这会起作用以及您期望发生什么。请在帖子中回答这些问题,然后人们将更有可能提供帮助。
  • 你的问题令人费解。如果您使用的是 Nokogiri,我们可以假设您相当了解对象及其方法的工作原理。你得到了 Nokogiri::XML::Element 的inspect 输出应该暗示你没有处理字符串,这是URI.escape 所期望的。因此,Ruby 抱怨 gsub 对非字符串参数无效似乎是明智的。
  • 当我查看 URI.escape 的文档时,一切都变得清晰起来。我假设 URI.escape 将采用 Nokogiri XML 元素,仅提取 URI 并将其转义为字符串。

标签: ruby nokogiri pry


【解决方案1】:

您无法转义 Nokogiri XML 元素,它是一个复杂的 Ruby 对象,URI 转义器不知道如何使用。您可以转义其上的特定属性,即字符串。

例如:

URI.escape(img.attr('src'))

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多