使用周围元素的参考数据

时间:2014-03-03 22:02:59

标签: ruby nokogiri mechanize watir browser-automation

我想从列表中提取一组数字。列表项由其中的标题标识,并以随机顺序显示。我想将(在第一个列表项中)数字(1,287,498)分配给同一<li>代码(Russia)中包含的标题。

<ul>

<li> 
<h6>Russia</h6> 
<p>Red</p> 
<p>1,287,498</p>
</li>

<li> 
<h6>USA</h6> 
<p>Blue</p>
<p>782,2378,223</p>
</li>

...etc.

</ul>

我想要这样的事情:

russia = 1,287,498

我尝试使用XPath,但它没有用,大概是因为订单是随机的;它不断分配错误的变量。

2 个答案:

答案 0 :(得分:2)

lis = doc.xpath('//li') # Or however you are getting the right elements

data = Hash[ lis.map{ |li| [li.at('h6').text, li.search('p').last.text] }]
#=> {
#=>   "Russia" => "1,287,498",
#=>   "USA"    => "782,2378,223",
#=> }

p data["Russia"]
#=> "1,287,498"

此答案假定带有数字的<p><li>中的最后一段。由于您没有共享完整的文档,因此很难知道这是否正确。

答案 1 :(得分:0)

您应该使用CSS同级选择器~+

doc.at('h6[text()=Russia] ~ p:last').text
#=> "1,287,498"
doc.at('h6[text()=Russia] + p + p').text
#=> "1,287,498"