我正在用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 vFTP
和version 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?)