如何在不调用 "next_element" 方法的情况下使用 Nokogiri select 下一个元素?
How can I select the next element using Nokogiri without calling "next_element" method?
当我 运行 我的代码在另一台机器上时,我得到以下错误:
ruby:符号查找错误:/usr/local/ruby/lib/ruby/gems/2.1.0/gems/nokogiri-1.6.7.2/lib/nokogiri/nokogiri.so:未定义的符号:xmlNextElementSibling
当进程启动时,我收到以下警告:
警告:Nokogiri 是针对 LibXML 版本 2.7.8 构建的,但已动态加载 2.6.30
我目前无法更新 nokogiri,所以我试图深入研究源代码,问题似乎与 Nokogiri 调用的 next_element 方法有关,该方法在我的机器上工作但在另一台机器上爆炸。
因此我的问题是:如何轻松 select 下一个 HTML 元素(特别是 table 中的下一个 "tr")?
这是我正在使用的代码
def get_weight(spot)
frame = spot.at_css("table[id='1']").css("tr")[1]
starter = frame.at('tr:contains("D7r5")')
return nil if starter == nil
starter = starter.next_element
peso = []
until starter.css("td")[1].nil?
data = starter.css("td")[1].inner_html.gsub(/\t{0..100}/, "").strip
ndecimal = data.scan(/[0-9]{1,4},?.?[0-9]{0,3}/).last.gsub(",", ".")
nmeasure = data.scan(/[kK][Gg]|\s[g]\s|[g]/).last
case nmeasure
when (/[kK][Gg]/)
peso << ndecimal.to_f
when (/g|\s[g]\s|[g]/)
peso << ndecimal.to_f / 1000
end
starter.next_element.nil? ? break : starter = starter.next_element
end
return peso.max == 0 ? nil : peso.max
end
next_element
的 XPath 等价物是 following-sibling::*[1]
。或者只是 following-sibling::*
,如果 XPath 将使用类似 at_xpath()
的东西执行,默认情况下 return 只有第一个匹配的节点。
当我 运行 我的代码在另一台机器上时,我得到以下错误: ruby:符号查找错误:/usr/local/ruby/lib/ruby/gems/2.1.0/gems/nokogiri-1.6.7.2/lib/nokogiri/nokogiri.so:未定义的符号:xmlNextElementSibling
当进程启动时,我收到以下警告: 警告:Nokogiri 是针对 LibXML 版本 2.7.8 构建的,但已动态加载 2.6.30 我目前无法更新 nokogiri,所以我试图深入研究源代码,问题似乎与 Nokogiri 调用的 next_element 方法有关,该方法在我的机器上工作但在另一台机器上爆炸。 因此我的问题是:如何轻松 select 下一个 HTML 元素(特别是 table 中的下一个 "tr")?
这是我正在使用的代码
def get_weight(spot)
frame = spot.at_css("table[id='1']").css("tr")[1]
starter = frame.at('tr:contains("D7r5")')
return nil if starter == nil
starter = starter.next_element
peso = []
until starter.css("td")[1].nil?
data = starter.css("td")[1].inner_html.gsub(/\t{0..100}/, "").strip
ndecimal = data.scan(/[0-9]{1,4},?.?[0-9]{0,3}/).last.gsub(",", ".")
nmeasure = data.scan(/[kK][Gg]|\s[g]\s|[g]/).last
case nmeasure
when (/[kK][Gg]/)
peso << ndecimal.to_f
when (/g|\s[g]\s|[g]/)
peso << ndecimal.to_f / 1000
end
starter.next_element.nil? ? break : starter = starter.next_element
end
return peso.max == 0 ? nil : peso.max
end
next_element
的 XPath 等价物是 following-sibling::*[1]
。或者只是 following-sibling::*
,如果 XPath 将使用类似 at_xpath()
的东西执行,默认情况下 return 只有第一个匹配的节点。