Ruby 变量存在则保存

Ruby save variable if it exists

我正在用 Nokogiri 解析一个 XML 文件,如果 XML 中存在一个值,我只想保存该变量。现在,我正在用 nil 拯救它,这为我生成了错误的结果。那么,如何将我的语句设置为仅在这两个都有实际值(不是零)时才保存?

port.xpath("service").each do |service|
            product = service.at_xpath("@product").value rescue nil
            version = service.at_xpath("@version").value rescue nil

目前,当文件被解析时,这两个值都可能为 nil,然后匹配所有内容!相反,如果找不到 product & version 匹配,我真的需要我的解析器传递值。

例如,假设 XML 表示服务是 product vFTPversion 2.2.1。这很好,因为它匹配正确 (vFTP 2.2.1)。

但是,如果 version nil,我现在遇到了一个问题,因为它现在将与所有版本的 vFTP 匹配。

检查 defined?if statement 似乎合乎逻辑,但出于某种原因,这对我来说似乎不正确。

这里有几种方法。在下一行:

next unless [product, version].all?(&:present?)

next if [product, version].any?(&:nil?)