我正在使用 Nokogiri 创建一个导入脚本来解析 XML 文件,然后循环遍历在我的数据库中创建新“产品”的节点。除了讨厌的价格字段(它是一个 float )之外,一切正常。
Product.create(:name => node.xpath("./text/name/text()"),
:description => node.xpath("./text/desc/text()"),
:brand => node.xpath("./brand/brandName/text()"),
:merchant => node.xpath("../@name"),
>> (A) #:price => 1.99))
>> (B) #:price => node.xpath("./price/buynow/text()"))
>> (C) #:price => node.xpath("./price/buynow/text()").to_f))
有问题的 XML 节点看起来像这样......
<buynow>6.99</buynow>
当我尝试行 (A) 进行测试时,它工作正常,但显然不受欢迎。
当我尝试行 (B) 或 (C) 尝试从节点获取值时,我的页面挂起,WEBrick 需要重新启动(终端中没有错误)并且日志中出现以下错误:
NoMethodError (undefined method `to_f' for [#<Nokogiri::XML::Text:0x81f5220c "6.99">]:Nokogiri::XML::NodeSet):
注意:即使我没有显式调用to_f方法也会出现同样的错误
我猜我需要以某种方式将节点值转换为 float ,但明显的方法导致了错误!
有人可以阐明这一点吗?
最佳答案
#xpath
、#css
和 #find
方法返回节点集,它们是子类数组,即使只有元素匹配。将价格提取为 float :
node.xpath("./price/buynow/text()").map(&:to_f).first
关于ruby-on-rails - 使用 Nokogiri 的 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892110/